#include<stdio.h>
#include<algorithm>
using namespace std;
int p[10000];
struct tree
{
int st,ed,va;
}road[10000];
int cmp(tree a,tree b)
{
return a.va<b.va;
}
int find(int n)
{
if(p[n]!=n)
{
p[n]=find(p[n]);
}
return p[n];
}
int main()
{
int n,m,count,i,a,b;
while(scanf("%d%d",&n,&m)!=EOF)
{
if(n==0)
{
break;
}
for(i=1;i<=m;i++)
{
p[i]=i;
}
for(i=1;i<=n;i++)
{
scanf("%d%d%d",&road[i].st,&road[i].ed,&road[i].va);
}
sort(road+1,road+n+1,cmp);
int sum=0;
for(i=1;i<=n;i++)
{
a=find(road[i].st);
b=find(road[i].ed);
if(a!=b)
{
p[a]=b;
sum+=road[i].va;
m--;
}
if(m==1)
{
break;
}
}
if(m==1)
{
printf("%d\n",sum);
}
else
{
puts("?");
}
}
}
Hdu1863 - 畅通工程 - 最小生成树
最新推荐文章于 2017-08-03 23:04:59 发布