• <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>
            #include <stdio.h>
            #include 
            <stdlib.h>
            #include 
            <math.h>
            #include 
            <string.h>

            #define INF 99999999
            #define min( a, b ) ( (a)< (b)?(a): (b) )

            int  x[110], y[110], father[110];
            double map[110][110], ans;
            bool   visite[110], circle[110];
            int    n, m, root;

            void dfs( int t )
            {
                visite[t]
            = true;
                
                
            forint i= 1; i<= n; ++i )
                
            if!visite[i] && map[t][i]!= INF )
                dfs( i );
            }

            bool isok()
            {
                memset( visite, 
            falsesizeof(visite) );
                dfs( root );
                
                
            forint i= 1; i<= n; ++i )
                
            if!visite[i] ) return false;
                
                
            return true;
            }

            double dist( int i, int j )
            {
                
            return sqrt( (x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]) );
            }

            int exist_circle()
            {
                root
            = 1; father[root]= root;
                
                
            forint i= 1; i<= n; ++i )
                
            if!circle[i] && i!= root )
                {
                    father[i]
            = i; map[i][i]= INF;
                    
                    
            forint j= 1; j<= n; ++j )
                    
            if!circle[j] && map[j][i]< map[father[i]][i] )
                    father[i]
            = j;
                }
                
                
            int i;
                
            for( i= 1; i<= n; ++i )
                {
                    
            if( circle[i] ) continue;
                    
                    memset( visite, 
            falsesizeof(visite) );
                    
            int j= i;
                    
            while!visite[j] ) {  visite[j]= true;  j= father[j];  }
                    
            if( j== root ) continue;
                    
                    
            return j;
                }
                
                
            return -1;
            }


            void  update( int t )
            {
                ans
            += map[father[t]][t];
                
            forint i= father[t]; i!= t; i= father[i] )
                {
                    ans
            += map[father[i]][i];
                    circle[i]
            = true;
                }
                
                
            forint i= 1; i<= n; ++i )
                
            if!circle[i] && map[i][t]!= INF )
                map[i][t]
            -= map[father[t]][t];
                
                
            forint j= father[t]; j!= t; j= father[j] )
                    
            forint i= 1; i<= n; ++i )
                    {
                        
            if( circle[i] ) continue;
                        
                        
            if( map[i][j]!= INF )
                        map[i][t]
            = min( map[i][t], map[i][j]- map[father[j]][j] );
                        
                        map[t][i]
            = min( map[j][i], map[t][i] );
                    }
            }

            void solve()
            {
                memset( circle, 
            falsesizeof(circle) );
                
                
            int j;
                
            while( ( j= exist_circle() )!= -1 ) update( j );
                
                
            for( j= 1; j<= n; ++j )
                
            if( j!= root && !circle[j] )
                ans
            += map[father[j]][j];
                
                printf(
            "%.2lf\n", ans );
            }

            int main()
            {
                
            while( scanf("%d%d",&n,&m)!= EOF )
                {
                    
            forint i= 0; i<= n; ++i )
                    
            forint j= 0; j<= n; ++j )
                    map[i][j]
            = INF;
                    
                    
            forint i= 1; i<= n; ++i )
                    scanf(
            "%d%d",&x[i], &y[i] );
                    
                    
            forint i= 0; i< m; ++i )
                    {
                        
            int a, b;
                        scanf(
            "%d%d",&a,&b);
                        
                        map[a][b]
            = dist( a, b );
                    }
                    
                    root
            = 1;  ans= 0;
                    
            if!isok() ) puts("poor snoopy");
                    
            else  solve();
                }
                
                
            return 0;
            }
            posted on 2009-02-19 22:01 Darren 閱讀(204) 評論(0)  編輯 收藏 引用

            只有注冊用戶登錄后才能發(fā)表評論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            久久综合给合久久狠狠狠97色| 久久综合久久美利坚合众国| 国产精品美女久久久m| 久久久久久久综合日本亚洲| 久久精品国产99国产精品| 亚洲精品午夜国产VA久久成人 | 国产精品对白刺激久久久| 久久这里的只有是精品23| 人妻无码精品久久亚瑟影视| 欧美喷潮久久久XXXXx| 99久久精品这里只有精品| 久久亚洲精品国产亚洲老地址 | 久久久久人妻一区二区三区vr| 996久久国产精品线观看| 欧美日韩精品久久久免费观看| 亚洲第一极品精品无码久久 | 天天久久狠狠色综合| 亚洲欧洲精品成人久久奇米网| 国产亚洲色婷婷久久99精品| 99久久国产亚洲综合精品| 国产精品99久久久久久www| 无码精品久久久天天影视| 久久伊人精品一区二区三区| 久久天天躁狠狠躁夜夜2020老熟妇| 国产精品99久久久精品无码| 人妻中文久久久久| 久久久久黑人强伦姧人妻| 99久久精品国产一区二区| 久久精品国产69国产精品亚洲| 久久久久亚洲AV成人片| 欧洲人妻丰满av无码久久不卡| 久久国产免费直播| 亚洲中文字幕无码久久精品1 | 91精品免费久久久久久久久| 久久国产精品无码一区二区三区 | 亚洲中文字幕伊人久久无码 | 国产亚洲精品美女久久久| 色综合久久久久无码专区| 97久久国产综合精品女不卡| 久久久久av无码免费网| 一本一本久久a久久综合精品蜜桃|