• <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 付翔 閱讀(301) 評論(0)  編輯 收藏 引用 所屬分類: ACM 圖論

            <2010年7月>
            27282930123
            45678910
            11121314151617
            18192021222324
            25262728293031
            1234567

            常用鏈接

            留言簿(2)

            隨筆分類

            隨筆檔案

            文章分類

            文章檔案

            CSDN - 我的blog地址

            博客

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            久久精品国产亚洲AV影院 | 久久99中文字幕久久| 国产精品岛国久久久久| 99久久精品免费看国产一区二区三区 | 亚洲精品高清久久| 国产精品欧美久久久久天天影视| 久久久久久夜精品精品免费啦| 久久97精品久久久久久久不卡| 亚洲国产小视频精品久久久三级 | 77777亚洲午夜久久多人| 久久精品国产影库免费看| 亚洲精品综合久久| 久久国产免费观看精品| 国产成人无码精品久久久性色| 久久综合中文字幕| 久久久久久亚洲精品成人| 亚洲欧洲久久av| 久久国产香蕉视频| 国产福利电影一区二区三区久久老子无码午夜伦不 | 情人伊人久久综合亚洲| 久久久久久久精品妇女99| 国内精品久久久久国产盗摄| 精品久久久久久久久久中文字幕 | 色综合久久综合中文综合网| 人妻少妇精品久久| 国产精品久久久久久久午夜片| 国产精品久久久久jk制服| 亚洲va国产va天堂va久久| 久久久亚洲AV波多野结衣| 亚洲国产精品无码久久九九| 久久se精品一区二区影院| 精品久久久久久无码中文字幕| 久久91精品国产91久久麻豆| 久久青青草原亚洲av无码app | 99久久综合国产精品二区| 久久亚洲欧美日本精品| 88久久精品无码一区二区毛片| 一本久久a久久精品综合夜夜| 国产精品女同久久久久电影院| 国产三级久久久精品麻豆三级| 久久亚洲欧美日本精品|