• <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


            裸的最小樹形圖,我就是為了檢驗?zāi)0?...結(jié)果還錯了.....%.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 閱讀(161) 評論(0)  編輯 收藏 引用 所屬分類: 圖論
            日韩电影久久久被窝网| 精品久久久中文字幕人妻| A狠狠久久蜜臀婷色中文网| 老色鬼久久亚洲AV综合| 人妻精品久久无码专区精东影业| 精品人妻久久久久久888| 国产精品久久久天天影视| 久久免费视频网站| 97精品伊人久久大香线蕉| 亚洲AV成人无码久久精品老人| 日本久久久精品中文字幕| 久久青青草视频| 国产精品免费久久久久久久久 | 亚洲人成伊人成综合网久久久| 国产精品久久久久久久久鸭 | 一级做a爰片久久毛片人呢| 思思久久好好热精品国产| 国产成人精品久久| 欧美精品久久久久久久自慰| 欧美大战日韩91综合一区婷婷久久青草 | 色综合久久综合中文综合网| 久久综合久久性久99毛片| 欧美777精品久久久久网| 成人午夜精品无码区久久| 人妻中文久久久久| 久久国产成人午夜AV影院| 亚洲狠狠久久综合一区77777| 亚洲精品乱码久久久久久久久久久久| 麻豆国内精品久久久久久| 国产免费久久精品丫丫| 成人a毛片久久免费播放| 国产精品美女久久久久久2018| 婷婷伊人久久大香线蕉AV| 久久亚洲精品成人AV| 人妻无码αv中文字幕久久| 国色天香久久久久久久小说| 99精品国产综合久久久久五月天| 久久久无码精品亚洲日韩京东传媒 | 久久久久亚洲AV片无码下载蜜桃| 日批日出水久久亚洲精品tv| 亚洲国产精品成人久久蜜臀 |