#include<bits/stdc++.h>
using namespace std;
int father[5010],n,m,k=0;
long long tot;
struct bian
{
int x,y,w;
}a[200005];
bool comp(const bian &a,const bian &b)
{
return a.w<b.w;
}
int getfather(int x)
{
if(father[x]==x) return x;
father[x]=getfather(father[x]);
return father[x];
}
void unionn(int x,int y)
{
int fa,fb;
fa=getfather(x);
fb=getfather(y);
if(fa!=fb)father[fa]=fb;
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++) father[i]=i;
for(int i=0;i<m;i++)
scanf("%d%d%d",&a[i].x,&a[i].y,&a[i].w);
sort(a,a+m,comp);
for(int i=0;i<m;i++)
{
if(getfather(a[i].x)!=getfather(a[i].y))
{
unionn(a[i].x,a[i].y);
tot=tot+a[i].w;
k++;
}
if(k==n-1) break;
}
if(k!=n-1)
printf("orz");
else
printf("%lld\n",tot);
return 0;
}
最小生成树-克鲁斯卡尔模板
最新推荐文章于 2021-04-05 18:22:22 发布