图论模板之最小生成树(kruskal)
作者:
1234abcd
,
2023-02-03 23:04:15
,
所有人可见
,
阅读 191
最小生成树kruskal
AcWing 859. Kruskal算法求最小生成树
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 1e5 + 10, M = N * 2;
int n, m;
int f[N];
struct node
{
int x, y, w;
}a[M];
int cmp(node x, node y)
{
return x.w < y.w;
}
int root(int x)
{
if (x != f[x]) f[x] = root(f[x]);
return f[x];
}
int main()
{
cin >> n >> m;
for (int i = 0; i < m; i ++ ) cin >> a[i].x >> a[i].y >> a[i].w;
sort(a, a + m, cmp);
int cnt = 0, sum = 0;
for (int i = 1; i <= n; i ++ ) f[i] = i;
for (int i = 0; i < m; i ++ )
{
int fx = root(a[i].x), fy = root(a[i].y);
if (fx != fy)
{
cnt ++ ;
sum += a[i].w;
f[fx] = fy;
}
}
if (cnt != n - 1) cout << "impossible";
else cout << sum;
return 0;
}