#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
struct node
{
int u;
int v;
int w;
}q[200001];
int father[50001];
int n, m;
int cmp(node a, node b)
{
return a.w < b.w;
}
int Find(int x)
{
int r, k, t;
r = x;
while(father[r]!=r)
r = father[r];
t = x;
while(t!=r)
{
k = father[t];
father[t] = r;
t = k;
}
return r;
}
int kruskal()
{
int i;
int ans = 0;
for(i=1; i<=n; i++)
{
father[i] = i;
}
for(i=0; i<m; i++)
{
int uu = Find(q[i].u);
int vv = Find(q[i].v);
if(uu!=vv)
{
father[uu] = vv;
ans+=q[i].w;
}
}
return ans;
}
int main()
{
cin >> n >> m;
for(int i = 0; i<m; i++)
cin >> q[i].u >> q[i].v >> q[i].w;
sort(q, q+m, cmp);
cout << kruskal() << endl;
return 0;
}
最小生成树(kruskal)
最新推荐文章于 2022-02-14 21:42:29 发布