杭电 1233 还是畅通工程
题目中文,不解释,直接上代码.
//和 HDU 1863 差不多,只是不再存在不能连通的情况,还有就是这一题输入的n是第一题的m,第一提的n是这一题的n*(n-1)/2
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#include<string.h>
struct engin{
int a,b,c;
}bug[5005];
int p[105];
int cmp(const void *a,const void *b)
{
return (*(engin *)a).c>(*(engin *)b).c?1:-1;//qsort对结构体的一级排序 从小到大排序
}
int father(int x)
{
return p[x]==x?p[x]:father(p[x]);//找父亲节点
}
int main()
{
int n,i,sum,x,y;
while(scanf("%d",&n),n)
{
for(i=0;i<=n;i++)
p[i]=i;
for(i=0;i<n*(n-1)/2;i++)
scanf("%d%d%d",&bug[i].a,&bug[i].b,&bug[i].c);
qsort(bug,n*(n-1)/2,sizeof(bug[0]),cmp);
sum=0;
for(i=0;i<n*(n-1)/2;i++)
{
x=father(bug[i].a);
y=father(bug[i].b);
if(x!=y)
{
sum+=bug[i].c;
p[x]=y;
}
}
printf("%d\n",sum);
}
return 0;
}