【题意】输入n村庄,接下来输入n*(n-1)/2条路以及路的权值。输出最小生成树的长度
#include<iostream>
#include<cstring>
#include<vector>
#include<math.h>
#include<algorithm>
using namespace std;
int tree[101];
int friends[101];
int finderoot(int x)
{
if(tree[x]==-1)return x;
else
{
int temp=finderoot(tree[x]);
tree[x]=temp;
return temp;
}
}
struct edge
{
int a,b,c;
}edges[100];
bool cmp(edge m,edge n)
{
return m.c<n.c;
}
int main(int argc, char const *argv[])
{
int n,a,b,c,count,cost;
while(cin>>n)
{
if(n==0)break;
count=0;
cost=0;
fill(tree,tree+100,-1);
memset(edges,0,sizeof(edges));
int bound=n*(n-1)/2;
for(int i=1;i<=bound;i++)
{
cin>>a>>b>>c;
edges[count].a=a;
edges[count].b=b;
edges[count].c=c;
count++;
}
sort(edges,edges+count,cmp);
for(int i=0;i<count;i++)
{
a=edges[i].a;
b=edges[i].b;
a=finderoot(a);
b=finderoot(b);
if(a!=b)
{
tree[a]=b;
cost+=edges[i].c;
}
}
cout<<cost<<endl;
}
return 0;
}