2016HUAS_ACM暑假集训3G - 还是畅通工程

最小生成树,题目简单。套的Prim模板,其他的题目比较有意义。

Sample Input

3                             //村庄个数
1 2 1                       //连通情况及权值
1 3 2
2 3 4
4
1 2 1
1 3 4
1 4 1
2 3 3
2 4 2
3 4 5
0

Sample Output       //输出最小生成树的权

3

5

 1 #include
 2 #include<string.h>
 3 #define size 100
 4 #define inf 0x3f3f3f3f
 5 
 6 int vellage[size][size],flag[size];
 7 int N,T,a,b,c,i,j,k,ans,maxn;
 8 
 9 void Init()
10 {
11     T=N*(N-1)>>1;
12     memset(flag,0,sizeof(flag));
13     memset(vellage,0,sizeof(vellage));
14 }    
15 
16 int Prim()
17 {
18     ans=0;
19     for(int h=1;h<=N;h++)
20     {
21         maxn=inf;
22         for(i=1;i<=N;i++)
23         {
24             if(flag[i]!=1&&vellage[1][i]<maxn)
25             {
26                 maxn=vellage[1][i];
27                 k=i;
28             }
29         }
30         ans+=maxn;
31         flag[k]=1;
32         for(j=2;j<=N;j++)
33         {
34             if(flag[j]!=1&&vellage[k][j]1][j])
35                 vellage[1][j]=vellage[k][j];
36         }
37     }
38     return ans;
39 }
40 
41 int main()
42 {
43     while(scanf("%d",&N),N)
44     {
45         Init();
46         while(T--)
47         {
48             scanf("%d %d %d",&a,&b,&c);
49             vellage[a][b]=vellage[b][a]=c;
50 
51         }
52         printf("%d\n",Prim());
53     }
54     return 0;
55 }
View Code

 

转载于:https://www.cnblogs.com/ankelen/p/5723134.html

你可能感兴趣的:(2016HUAS_ACM暑假集训3G - 还是畅通工程)