#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int a[110];
int pa[110];
int n,m;
int i ,j;
struct node{
int u,v,w;
}arr[5500];
void init()
{
for(i=1;i<=n;i++)
pa[i]=i;
}
bool cmp(node a,node b)
{
return a.w<b.w;
}
int find(int x)
{
if(x==pa[x])
return x;
else
return pa[x]=find(pa[x]);
}
int unite(int x,int y)
{
int fx=find(x);
int fy=find(y);
if(fx!=fy)
{
pa[fy]=fx;
return 1;
}
return 0;
}
int main()
{
while(scanf("%d",&n),n)
{
int ans=0,ant=0;
int sum=0;
if(n==0)
break;
scanf("%d",&m);
for(i=1;i<=m;i++)
{
scanf("%d%d%d",&arr[i].u,&arr[i].v,&arr[i].w);
}
sort(arr+1,arr+m+1,cmp);
init();
for(i=1;i<=m;i++)
{
if(unite(arr[i].u,arr[i].v))
{
ant++;
sum+=arr[i].w;
}
if(ant==n-1)
break;
}
printf("%d\n",sum);
}
}
模板积累——最小生成树、并查集
最新推荐文章于 2024-08-02 15:47:21 发布