• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            posts - 7,comments - 3,trackbacks - 0
            Command Network
            Time Limit: 1000MSMemory Limit: 131072K
            Total Submissions: 7267Accepted: 2160

            Description

            After a long lasting war on words, a war on arms finally breaks out between littleken’s and KnuthOcean’s kingdoms. A sudden and violent assault by KnuthOcean’s force has rendered a total failure of littleken’s command network. A provisional network must be built immediately. littleken orders snoopy to take charge of the project.

            With the situation studied to every detail, snoopy believes that the most urgent point is to enable littenken’s commands to reach every disconnected node in the destroyed network and decides on a plan to build a unidirectional communication network. The nodes are distributed on a plane. If littleken’s commands are to be able to be delivered directly from a node A to another node B, a wire will have to be built along the straight line segment connecting the two nodes. Since it’s in wartime, not between all pairs of nodes can wires be built. snoopy wants the plan to require the shortest total length of wires so that the construction can be done very soon.

            Input

            The input contains several test cases. Each test case starts with a line containing two integer N (N ≤ 100), the number of nodes in the destroyed network, and M (M ≤ 104), the number of pairs of nodes between which a wire can be built. The next N lines each contain an ordered pair xi and yi, giving the Cartesian coordinates of the nodes. Then follow M lines each containing two integers i and j between 1 and N (inclusive) meaning a wire can be built between node i and node j for unidirectional command delivery from the former to the latter. littleken’s headquarter is always located at node 1. Process to end of file.

            Output

            For each test case, output exactly one line containing the shortest total length of wires to two digits past the decimal point. In the cases that such a network does not exist, just output ‘poor snoopy’.

            Sample Input

            4 6 
            0 6
            4 6
            0 0
            7 20
            1 2
            1 3
            2 3
            3 4
            3 1
            3 2
            4 3
            0 0
            1 0
            0 1
            1 2
            1 3
            4 1
            2 3

            Sample Output

            31.19 
            poor snoopy

            Source


            裸的最小樹形圖,我就是為了檢驗模板....結果還錯了.....%.2lf在POJ上用G++會莫名的掛掉,所以用C++就行了。
            代碼:
            #include <cstdio>
            #include 
            <cstring>
            #include 
            <cmath>
            #include 
            <algorithm>
            #define MAXN 110
            #define INF 1e30
            using namespace std;

            inline 
            double sqr(double x)
            {
                
            return x * x;
            }

            struct point
            {
                
            double _x, _y;
                
            double dist_with(const point &rh) const
                {
                    
            return sqrt(sqr(_x - rh._x) + sqr(_y - rh._y));
                }
            } po[MAXN];

            double g[MAXN][MAXN];

            int pre[MAXN];
            bool is_out[MAXN];
            int vis[MAXN], vcnt;

            double solve(int n, int root)
            {
                memset(is_out, 
            false, n);
                
            double ans = 0;
                
            while (1)
                {
                    
            int i, j, k;
                    
            for (i = 0; i < n; ++i)
                        
            if (i != root && !is_out[i])
                        {
                            pre[i] 
            = i;
                            
            for (j = 0; j < n; ++j)
                                
            if (!is_out[j] && g[pre[i]][i] > g[j][i])
                                    pre[i] 
            = j;
                            
            if (pre[i] == i) throw false;
                        }
                    
            for (i = 0; i < n; ++i)
                        
            if (i != root && !is_out[i])
                        {
                            j 
            = i;
                            vis[i] 
            = ++vcnt;
                            
            while (vis[pre[j]] != vcnt && pre[j] != root)
                            {
                                j 
            = pre[j];
                                vis[j] 
            = vcnt;
                            }
                            
            if (pre[j] == i)
                                
            break;
                        }
                    
            if (i == n)
                    {
                        
            for (j = 0; j < n; ++j)
                            
            if (j != root && !is_out[j])
                                ans 
            += g[pre[j]][j];
                        
            break;
                    }
                    j 
            = i;
                    
            do
                    {
                        is_out[j] 
            = true;
                        ans 
            += g[pre[j]][j];
                        j 
            = pre[j];
                    } 
            while (j != i);
                    
            for (int j = 0; j < n; ++j)
                        
            if (vis[j] == vcnt)
                            
            for (int k = 0; k < n; ++k)
                                
            if (!is_out[k])
                                {
                                    
            if (g[i][k] > g[j][k])
                                        g[i][k] 
            = g[j][k];
                                    
            if (g[k][i] > g[k][j] - g[pre[j]][j] && g[k][j] != INF)
                                        g[k][i] 
            = g[k][j] - g[pre[j]][j];
                                }
                    is_out[i] 
            = false;
                }
                
            return ans;
            }

            int main()
            {
                
            int n, m;
                
            while (scanf("%d%d"&n, &m) != EOF)
                {
                    
            for (int i = 0; i < n; ++i)
                        
            for (int j = 0; j < n; ++j)
                            g[i][j] 
            = INF;
                    
            for (int i = 0; i < n; ++i)
                        scanf(
            "%lf%lf"&po[i]._x, &po[i]._y);
                    
            for (int i = 0; i < m; ++i)
                    {
                        
            int a, b;
                        scanf(
            "%d%d"&a, &b);
                        
            if (a != b)
                            g[a 
            - 1][b - 1= po[a - 1].dist_with(po[b - 1]);
                    }
                    
            try
                    {
                        printf(
            "%.2lf\n", solve(n, 0));
                    }
                    
            catch (bool)
                    {
                        printf(
            "poor snoopy\n");
                    }
                }
                
            return 0;
            }
            posted on 2011-10-15 22:18 LLawliet 閱讀(163) 評論(0)  編輯 收藏 引用 所屬分類: 圖論
            国产精品久久久久国产A级| 狠狠精品干练久久久无码中文字幕| 天天综合久久一二三区| 久久99国产精品久久99小说| 一本一本久久a久久综合精品蜜桃| 久久99亚洲网美利坚合众国| 久久乐国产精品亚洲综合| 久久婷婷五月综合97色一本一本 | 99久久综合狠狠综合久久| 99久久国产宗和精品1上映| 国产69精品久久久久99尤物| 久久国产免费直播| 久久亚洲天堂| 国产高潮久久免费观看| 久久99精品久久久久久久久久| 午夜精品久久久久久| 久久免费视频观看| 久久久久AV综合网成人| 欧美伊人久久大香线蕉综合| 久久久99精品成人片中文字幕| 精品久久久久久国产| 日本久久久久亚洲中字幕| 亚洲中文字幕无码久久综合网| 久久婷婷五月综合色奶水99啪 | 久久夜色精品国产亚洲| 久久久精品视频免费观看| 久久人人爽人人人人爽AV| 久久免费精品视频| 久久精品人人做人人妻人人玩| 久久人人青草97香蕉| 久久久久久久久久久久中文字幕| 要久久爱在线免费观看| 久久精品国产精品亚洲人人| 四虎国产精品免费久久5151| 精品综合久久久久久97超人| 日韩精品国产自在久久现线拍| 97久久香蕉国产线看观看| 久久免费小视频| 国产精品美女久久久久AV福利| 久久嫩草影院免费看夜色| 午夜精品久久久久久久无码|