很简单的一道题,代码附上:
#include<stdio.h>
#include<algorithm>
using namespace std;
int num[10002];
struct road
{
int x;
int y;
int len;
} p[10001];
int cmp(struct road a,struct road b)
{
return a.len<b.len;
}
int find(int a)
{
return a==num[a]?a:find(num[a]);
}
int main()
{
int n,m;
while(scanf("%d",&n),n)
{
int i,a,b,res=0;
for(i=0; i<(n*(n-1))/2; i++)
scanf("%d%d%d",&p[i].x,&p[i].y,&p[i].len);
sort(p,p+(n*(n-1))/2,cmp);
for(int j=1; j<=n; j++)
num[j]=j;
for(int j=0; j<(n*(n-1))/2; j++)
{
a=find(p[j].x);
b=find(p[j].y);
if(a!=b)
{
num[a]=b;
res+=p[j].len;
}
}
printf("%d\n",res);
}
return 0;
}