最小生成树。连通所有点所需的最小代价。
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#define INF 100000001
using namespace std;
int a[1001];
struct lx
{
int x,y,c;
}l[5001];
int intset(int n)
{
for(int i=0; i<=n; i++)
a[i]=i;
}
int fa(int x)
{
if(x!=a[x])
x=fa(a[x]);
return a[x];
}
bool cmpa(lx t1,lx t2)
{
return t1.c<t2.c;
}
int main()
{
int n;
while(scanf("%d",&n),n)
{
int m=n*(n-1)/2;
for(int i=0;i<m;i++)
scanf("%d%d%d",&l[i].x,&l[i].y,&l[i].c);
int x,y;
intset(n);
sort(l,l+m,cmpa);
int ans=0;
for(int i=0;i<m;i++)
{
x=fa(l[i].x);
y=fa(l[i].y);
if(x!=y)
{
ans+=l[i].c;
a[y]=x;
}
}
printf("%d\n",ans);
}
}