http://acm.hdu.edu.cn/showproblem.php?pid=1233
最小生成树,查找根节点的函数里面等号写成赋值号,查了半个小时、、、
View Code
#include <stdio.h> #include <stdlib.h> #define N 110 int idx[N]; struct node{ int a,b,d; }r[N*(N-1)/2]; int cmp(const void*a,const void*b) { return (*(struct node*)a).d-(*(struct node*)b).d; } int find(int n) { return idx[n]==n?n:idx[n]=find(idx[n]); } int main() { int i,n,m; int p,q; while(~scanf("%d",&n),n) { for(i=1;i<=n;i++) idx[i]=i; m=n*(n-1)/2; for(i=0;i<m;i++) scanf("%d%d%d",&r[i].a,&r[i].b,&r[i].d); qsort(r,m,sizeof(struct node),cmp); int cnt=0; int d=0; for(i=0;cnt<n-1;i++) { p=find(r[i].a); q=find(r[i].b); if(p!=q) { d+=r[i].d; idx[p]=q; cnt++; } } printf("%d\n",d); } return 0; }