• <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热只有频精品66| 久久中文字幕一区二区| 久久亚洲精品中文字幕| 久久无码一区二区三区少妇| 久久本道伊人久久| 久久天天躁狠狠躁夜夜躁2014| 99久久精品国产高清一区二区| 中文成人久久久久影院免费观看| 久久av无码专区亚洲av桃花岛| 久久亚洲AV无码精品色午夜| 91精品国产91热久久久久福利 | 亚洲综合熟女久久久30p| 曰曰摸天天摸人人看久久久| 国内精品久久久久影院薰衣草| 久久精品国产清自在天天线| 久久99热这里只有精品国产| av午夜福利一片免费看久久| 久久人人爽人人人人片av| 欧美激情精品久久久久久久| www亚洲欲色成人久久精品| 久久久久国产| 国产精品99久久久久久董美香| 日韩av无码久久精品免费| 精品国产99久久久久久麻豆| 婷婷久久综合九色综合绿巨人| 久久无码一区二区三区少妇| 精品久久综合1区2区3区激情| 国产亚洲美女精品久久久久狼| 成人综合伊人五月婷久久| 99久久久国产精品免费无卡顿| AV色综合久久天堂AV色综合在| 国产精品久久午夜夜伦鲁鲁|