标签:
题目:点击打开链接
#include<stdio.h> #include<algorithm> using namespace std; int n,m; int per[105]; struct stu { int u,v,w; }edge[105]; void init() { int i; for(i=1;i<=m;i++) per[i]=i; } int find(int x) { if(x==per[x]) return x; else return per[x]=find(per[x]); } bool join(int x,int y) { int fx=find(x),fy=find(y); if(fx!=fy) { per[fx]=fy; return true; } else return false; } int cmp(stu a,stu b) { return a.w<b.w; } int main() { while(scanf("%d%d",&n,&m),n) { init(); int i,sum=0,k=0; for(i=0;i<n;i++) scanf("%d%d%d",&edge[i].u,&edge[i].v,&edge[i].w); sort(edge,edge+n,cmp);//对n进行排序 for(i=0;i<n;i++) { if(join(edge[i].u,edge[i].v)) sum+=edge[i].w; } for(i=2;i<=m;i++) { if(find(i)!=find(i-1)) k=1; } if(k) printf("?\n"); else printf("%d\n",sum); } return 0; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:
原文地址:http://blog.csdn.net/zm_11/article/details/47420979