#include <stdio.h>
#include <bits/stdc++.h>
using namespace std;
int n,m,num;
long long int sum;
struct q{
int u,v,w;
} e[2000005];
int fa[50010];
int get_fa(int x)//并查集
{
if(fa[x]==x)
return x;
else
return fa[x]=get_fa(fa[x]);
}
long long int ans=0;
bool vis(q u,q v)
{//排序
return u.w<v.w;
}
inline void kuskal()
{
for(int i=1;i<=m;i++)
{
int fx=get_fa(e[i].u),fy=get_fa(e[i].v);
if(fx==fy)
continue;
fa[fy]=fx;
ans+=e[i].w;
num++;
if(num==n-1) break;
}
}
int main()
{
int a,c,b;
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
{
fa[i]=i;
}
for(int i=1;i<=m;i++)
{
scanf("%d%d%d",&e[i].u,&e[i].v,&e[i].w);
}
sort(e+1,e+1+m,vis);
kuskal();
printf("%d\n",ans);
return 0;
}
最小生成树的kuskal算法
最新推荐文章于 2021-10-25 15:13:32 发布