• <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)  編輯 收藏 引用 所屬分類: 圖論
            国产亚洲精品自在久久| 久久久久久久97| 久久婷婷激情综合色综合俺也去| 狠狠色丁香久久婷婷综合| 亚洲中文久久精品无码ww16| 国产成人精品久久一区二区三区| 亚洲精品高清国产一久久| 无码任你躁久久久久久老妇| 久久人人爽人人爽人人片AV麻烦| 中文精品久久久久人妻| 久久国产精品一国产精品金尊| 狠狠88综合久久久久综合网| 四虎国产永久免费久久| 久久精品国产久精国产果冻传媒| 国产一区二区三区久久| 久久久精品国产免大香伊| 99久久免费国产精品| 久久天天躁狠狠躁夜夜96流白浆 | 久久精品国产亚洲Aⅴ香蕉| 亚洲Av无码国产情品久久| 久久精品国产亚洲av水果派| 青青草原综合久久大伊人导航| 国产69精品久久久久777| 亚洲香蕉网久久综合影视| 婷婷国产天堂久久综合五月| 亚洲一区中文字幕久久| 欧美丰满熟妇BBB久久久| 老男人久久青草av高清| 久久综合狠狠综合久久97色| 国产精品99久久久久久猫咪 | 久久精品18| 99久久精品免费看国产免费| 国产欧美久久一区二区| avtt天堂网久久精品| 久久天堂AV综合合色蜜桃网 | 久久人人爽人人爽人人AV东京热| 久久久精品久久久久影院| 久久精品极品盛宴观看| 国产精品一区二区久久精品涩爱| 午夜精品久久久久久| 久久精品国产亚洲AV忘忧草18 |