标签:
Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 32424 Accepted Submission(s): 14588
1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 using namespace std; 5 int per[110],m,n; 6 void init() 7 { 8 int i; 9 for(i=1;i<110;i++) 10 per[i]=i; 11 } 12 struct node 13 { 14 int b,e,w; 15 }s[6000]; 16 17 18 bool cmp(node x,node y) 19 { 20 return x.w<y.w; 21 } 22 23 24 int find(int x) 25 { 26 int t=x; 27 while(t!=per[t]) 28 t=per[t];//寻找根节点 29 return t; 30 } 31 bool join(int x,int y) 32 { 33 int fx=find(x); 34 int fy=find(y); 35 if(fx!=fy) 36 { 37 per[fx]=fy; 38 return true; 39 } 40 return false;//判断是否成环 41 } 42 43 int main() 44 { 45 int i; 46 while(scanf("%d",&m),m) 47 { 48 49 n=m*(m-1)/2; 50 init(); 51 for(i=0;i<n;i++) 52 scanf("%d%d%d",&s[i].b,&s[i].e,&s[i].w); 53 sort(s,s+n,cmp);//对权值排序 54 int sum=0; 55 for(i=0;i<n;i++) 56 { 57 // printf("---%d %d %d---\n",s[i].b,s[i].e,s[i].w); 58 if(join(s[i].b,s[i].e)) 59 sum+=s[i].w; 60 } 61 printf("%d\n",sum); 62 } 63 return 0; 64 }
标签:
原文地址:http://www.cnblogs.com/Eric-keke/p/4720106.html