• <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 - 106,  comments - 32,  trackbacks - 0
             

            Constructing Roads

            Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
            Total Submission(s): 3780    Accepted Submission(s): 1298


            Problem Description
            There are N villages, which are numbered from 1 to N, and you should build some roads such that every two villages can connect to each other. We say two village A and B are connected, if and only if there is a road between A and B, or there exists a village C such that there is a road between A and C, and C and B are connected. 

            We know that there are already some roads between some villages and your job is the build some roads such that all the villages are connect and the length of all the roads built is minimum.
             

            Input
            The first line is an integer N (3 <= N <= 100), which is the number of villages. Then come N lines, the i-th of which contains N integers, and the j-th of these N integers is the distance (the distance should be an integer within [1, 1000]) between village i and village j.

            Then there is an integer Q (0 <= Q <= N * (N + 1) / 2). Then come Q lines, each line contains two integers a and b (1 <= a < b <= N), which means the road between village a and village b has been built.

            Output
            You should output a line contains an integer, which is the length of all the roads to be built such that all the villages are connected, and this value is minimum.


            #include<iostream>
            #include
            <string.h>
            using namespace std;

            #define infinity 123456789
            #define max_vertexes 100 

            typedef 
            int Graph[max_vertexes][max_vertexes];

            Graph G;
            int total;
            int lowcost[max_vertexes],closeset[max_vertexes],used[max_vertexes];
            int father[max_vertexes];
            void prim(Graph G,int vcount)
            {
                
            int i,j,k;
                
            int min = infinity;
                
            for (i=0;i<vcount;i++)
                {
                    lowcost[i]
            =G[0][i];
                    closeset[i]
            =0
                    used[i]
            =0;
                    father[i]
            =-1
                }
                used[
            0]=1
                
                
            for (i=1;i<vcount;i++)
                {
                    j
            =0;
                    
                    
            while (used[j]) j++;
                    min 
            = lowcost[j];
                    
            for (k=0;k<vcount;k++)
                        
            if ((!used[k])&&(lowcost[k]<min)) 
                        {
                            min 
            =lowcost[k];
                            j
            =k;
                        }
                        father[j]
            =closeset[j]; 
                        used[j]
            =1;
                        total 
            += min;
                        
            for (k=0;k<vcount;k++)
                            
            if (!used[k]&&(G[j][k]<lowcost[k]))
                            { 
                                lowcost[k]
            =G[j][k];
                                closeset[k]
            =j; 
                            }
                }
            }

            int main()
            {
                
            int N,i,j,Q;
                
            int x,y;
                
            while(cin>>N)
                {
                    
                    total 
            = 0;
                    
            for(i =0; i< N;i++)
                    {
                        
            for(j = 0;j < N; j ++)
                            cin
            >>G[i][j];
                    }
                    cin
            >>Q;
                    
            for(i = 0; i < Q; i ++)
                    {
                        cin
            >>x>>y;
                        G[x
            -1][y-1= 0;
                        G[y
            -1][x-1= 0;
                    }
                    prim(G,N);
                    cout
            << total<<endl;
                }
                
            return 0;
            }


            posted on 2010-09-02 23:48 付翔 閱讀(294) 評論(0)  編輯 收藏 引用 所屬分類: ACM 圖論

            <2010年6月>
            303112345
            6789101112
            13141516171819
            20212223242526
            27282930123
            45678910

            常用鏈接

            留言簿(2)

            隨筆分類

            隨筆檔案

            文章分類

            文章檔案

            CSDN - 我的blog地址

            博客

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            久久亚洲欧美国产精品| 欧美大香线蕉线伊人久久| 嫩草影院久久99| 狠狠色综合久久久久尤物| 国产精品热久久毛片| 人妻无码αv中文字幕久久琪琪布| 欧美国产成人久久精品| 久久精品水蜜桃av综合天堂| 青青青国产精品国产精品久久久久| 久久久久亚洲精品无码网址| 色偷偷久久一区二区三区| 人人狠狠综合久久亚洲88| 久久久久亚洲精品日久生情 | 久久www免费人成看片| 伊人久久精品无码av一区| 亚洲精品国产成人99久久| 欧美日韩精品久久久免费观看| 97久久久久人妻精品专区| 欧美激情精品久久久久久久 | 久久99久久成人免费播放| 97久久婷婷五月综合色d啪蜜芽| 精品九九久久国内精品| 久久久久久久97| 久久青青国产| 国内精品久久久久久久影视麻豆| 一本久久知道综合久久| 欧洲国产伦久久久久久久| 国产精品99久久精品爆乳| 久久精品国产亚洲AV嫖农村妇女| 久久国内免费视频| 久久露脸国产精品| 久久久国产精品网站| 久久久久亚洲AV成人网人人网站| 久久精品国产99国产精品| 精品国产综合区久久久久久| 国产一级做a爰片久久毛片| 久久丫精品国产亚洲av不卡| 亚洲国产精品久久久天堂| 久久久噜噜噜久久中文字幕色伊伊 | 亚洲精品乱码久久久久久不卡| 97久久精品人人做人人爽|