您的位置:首页 > 编程语言 > C语言/C++

HDU 1233

2015-07-15 20:28 423 查看
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
int p[105];
int n,m;
struct Edge
{
int u;
int v;
int w;
}edge[5005];
bool cmp(Edge x,Edge y)
{
return x.w<y.w;
}
int find(int x)
{
return p[x]==x?x:p[x]=find(p[x]);
}
int kruskal()
{
int ans=0,num=0;
for(int i=1;i<=n;i++)
p[i]=i;
sort(edge,edge+m,cmp);
for(int i=0;i<m;i++)
{
int x=find(edge[i].u);
int y=find(edge[i].v);
if(x!=y)
{
p[x]=find(y);
num++;
ans+=edge[i].w;
}
if(num==n-1) return ans;
}
}
int main()
{
while(scanf("%d",&n)!=EOF&&n)
{
m=n*(n-1)/2;
for(int i=0;i<m;i++)
{
scanf("%d%d%d",&edge[i].u,&edge[i].v,&edge[i].w);
}
int ans=kruskal();
printf("%d\n",ans);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息