裸的最小生成树~
代码:
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn=5501;
struct Edge
{
int u;
int v;
int cost;
bool operator <(const Edge &a)const
{
return cost<a.cost;
}
}a[maxn];
int n,m,p[maxn];
int find(int x)
{
if(p[x]==-1)
return x;
return p[x]=find(p[x]);
}
int main()
{
while(scanf("%d",&n)&&n)
{
memset(p,-1,sizeof(p));
int m=n*(n-1)/2;
for(int i=0;i<m;i++)
scanf("%d%d%d",&a[i].u,&a[i].v,&a[i].cost);
sort(a,a+m);
int res=n-1,ans=0;
for(int i=0;i<m;i++)
{
int x=find(a[i].u);
int y=find(a[i].v);
if(x!=y)
{
p[x]=y;
ans+=a[i].cost;
if(!--res)
break;
}
}
printf("%d\n",ans);
}
return 0;
}