//感谢师哥指导#include<cstdio>#include<cstring>#include<iostream>#include<cmath>#include<algorithm>using namespace std;int n,m;int x,y;int ans;int abw;int sum;int a[10000+5];struct stu{ int z; int w; int g;};stu p[10000+5];int cmp(stu a,stu b){ return a.g<b.g;}//运用于sort的结构体排序函数int text(){ for(int i=1;i<=n;i++) { a[i]=i; } return 0;}int getf(int v){ if(a[v]==v) { return v; } else { a[v]=getf(a[v]); return a[v]; }}int merg(int v,int u){ int t1,t2; t1=getf(v); t2=getf(u); if(t1!=t2) { a[t2]=t1; return 1; } return 0;}int main(){ memset(p,0,sizeof(p));//将结构体内部元素全部清零 /*for(int i=0;i<10;i++) { cout<<p[i].z<<' '<<p[i].w<<endl; }*/ while(scanf("%d",&n)&&n) { abw=0; sum=0; text(); ans=n*(n-1)/2; for(int i=0;i<ans;i++) { scanf("%d%d%d",&p[i].z,&p[i].w,&p[i].g); } stable_sort(p,p+ans,cmp);//进行排列,便于从最小节点开始 for(int i=0;i<ans;i++) { if(merg(p[i].z,p[i].w)) { sum+=p[i].g; abw++; }//依次讨论是否在同一集合,如果不是则增加sum if(abw==n)break;//判断是否达到数据要求 } PRintf("%d/n",sum); } return 0;}
新闻热点
疑难解答