#include<bits/stdc++.h>
using namespace std;
struct gg
{
int st,ed,cost;
};
int cmp (gg a,gg b)
{
return a.cost<b.cost;
}
gg B[400050];
int pre[5050];
void init(int n)
{
for(int i=1;i<=n;i++)
{
pre[i]=i;
}
return ;
}
int find2(int x)
{
if(x!=pre[x])
pre[x]=finds(pre[x]);
return pre[x];
}
void join(int a,int b)
{
int x=find2(a);
int y=find2(b);
if(x!=y)
pre[x]=y;
return;
}
int main()
{
int i,j,n,m;
scanf("%d%d",&n,&m);
init (n);
for(i=1;i<=m;i++)
{
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
B[i].st=a;
B[i].ed=b;
B[i].cost=c;
}
sort(B+1,B+m+1,cmp);
int ans=0,sum=0;
for(i=1;i<=m;i++)
{
if(sum==n-1) break;
if(find2(B[i].st)!=find2(B[i].ed))
{
sum++;
join(B[i].st,B[i].ed);
ans+=B[i].cost;
}
}
printf("%d\n",ans);
return 0;
}
最小生成树(并查集模板)
最新推荐文章于 2022-11-05 13:29:47 发布