原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1233
#include<cstdio>
#include<algorithm>
int fa[100 + 10];
struct Road{
int x;
int y;
int length;
}road[5000];
bool cmp(Road a,Road b)
{
if(a.length < b.length)
return true;
else
return false;
}
int find_set(int i)
{
if(fa[i] == i) return i;
else return find_set(fa[i]);
}
int main()
{
int m,n,i;// n为村庄数目 m为 n*(n - 1)/2.0
int result = 0;
while(scanf("%d",&n) > 0 && n != 0)
{
result = 0;
m = n * (n - 1) / 2;
for(i = 1; i <= n; i++) fa[i] = i;
for(i = 1; i <= m; i++)
scanf("%d%d%d",&road[i].x,&road[i].y,&road[i].length);
std::sort(road + 1,road + 1 + m,cmp);
for(i = 1; i <= m; i++)
{
int root_x = find_set(road[i].x);
int root_y = find_set(road[i].y);
if(root_x != root_y)
{
fa[root_y] = root_x;
result += road[i].length;
}
}
printf("%d\n",result);
}
return 0;
}