【最小生成树】还是畅通工程
还是畅通工程
Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 30613 Accepted Submission(s): 13713
Problem Description
某省调查乡村交通状况,得到的统计表中列出了任意两村庄间的距离。省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可),并要求铺设的公路总长度为最小。请计算最小的公路总长度。
Input
测试输入包含若干测试用例。每个测试用例的第1行给出村庄数目N ( < 100 );随后的N(N-1)/2行对应村庄间的距离,每行给出一对正整数,分别是两个村庄的编号,以及此两村庄间的距离。为简单起见,村庄从1到N编号。
当N为0时,输入结束,该用例不被处理。
当N为0时,输入结束,该用例不被处理。
Output
对每个测试用例,在1行里输出最小的公路总长度。
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
Huge input, scanf is recommended.
Source
代码:(Prim+堆排序,2015.8.17)
View Code
1 #include <iostream> 2 #include <stdio.h> 3 #include <math.h> 4 #include <queue> 5 #include <algorithm> 6 #define MAX 100100 7 using namespace std; 8 int First[MAX]; 9 int Sign;/*记录边编号*/ 10 struct Poin 11 { 12 int to,v,next; 13 friend bool operator<(Poin a,Poin b) 14 { 15 return a.v>b.v; 16 } 17 }ID[MAX*3]; 18 void Cread(int N){for(int i=0;i<=N;i++)First[i]=0;Sign=1;}/*初始化*/ 19 void Add_E(int x,int y,int z) 20 { 21 ID[Sign].to=y; 22 ID[Sign].v=z; 23 ID[Sign].next=First[x]; 24 First[x]=Sign++; 25 } 26 27 int Prim(int N)/*Prim+堆维护*/ 28 { 29 priority_queue <Poin>Q; 30 Poin NUM; 31 int P=1,i,Sum=0,Vis[MAX]={0}; 32 Vis[P]=1;N--; 33 for(i=First[P];i;i=ID[i].next){Q.push(ID[i]);} 34 while(!Q.empty()&&N) 35 { 36 NUM=Q.top();Q.pop(); 37 if(!Vis[NUM.to]) 38 { 39 P=NUM.to;Vis[P]=1; 40 Sum+=NUM.v;N--; 41 for(i=First[P];i;i=ID[i].next) 42 Q.push(ID[i]); 43 } 44 } 45 if(!N)return Sum; 46 else return -1; 47 } 48 int main() 49 { 50 51 int N,M,i,A,B,C,SUM; 52 while(scanf("%d",&N)!=EOF) 53 { 54 M=N*(N-1)/2; 55 if(N==0)break; 56 Cread(N); 57 for(i=0;i<M;i++) 58 { 59 scanf("%d%d%d",&A,&B,&C); 60 Add_E(A,B,C);Add_E(B,A,C); 61 } 62 SUM=Prim(N); 63 if(SUM!=-1)printf("%d\n",SUM); 64 else printf("?\n"); 65 } 66 return 0; 67 }
代码详细参考畅通工程:http://www.cnblogs.com/LWF5201314614/articles/3929305.html
转载请备注:
**************************************
* 作者: Wurq
* 博客: https://www.cnblogs.com/Wurq/
* Gitee: https://gitee.com/wurq
**************************************
**************************************
* 作者: Wurq
* 博客: https://www.cnblogs.com/Wurq/
* Gitee: https://gitee.com/wurq
**************************************