- 专题九 最小生成树
kruskal
- @ 2025-8-16 11:09:44
#include<bits/stdc++.h>
using namespace std;
int n, m;
int fa[N];
struct Node{
int a, b, w;
bool operator< (const Node &t) const{
return w < t.w;
}
}g[M];
int find(int x)
{
if(fa[x] != x) fa[x] = find(fa[x]);
return fa[x];
}
int kruskal()
{
sort(g, g + m);
for(int i = 1; i <= n; i++)
fa[i] = i;
int res = 0, cnt = 0;
for(int i = 0; i < m; i++)
{
int a = g[i].a, b = g[i].b, w = g[i].w;
a = find(a), b = find(b);
if(a != b)
{
fa[a] = b;
res += w;
cnt ++;
}
}
if(cnt < n - 1) return INF;
return res;
}
0 条评论
目前还没有评论...