并查集 UnionFind

并查集UnionFind模板

节点值范围: $[0,n-1]$

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
class UnionFind{
vector<int> pa;
vector<int> sz;
public:
int cc;
UnionFind(int n):pa(n),sz(n,1),cc(n){
ranges::iota(pa,0);
}
int find(int x){
return pa[x]==x?x:pa[x]=find(pa[x]);
}
void merge(int x,int y){
x=find(x),y=find(y);
if(x==y){
return ;
}
if(sz[x]>sz[y]){
swap(x,y);
}
pa[x]=y;
sz[y]+=sz[x];
sz[x]=sz[y];
--cc;
}
bool isSame(int x,int y){
return find(x)==find(y);
}
};

并查集 UnionFind
https://xifenggood.github.io/2025/05/18/note/UnionFind/
作者
Jie Wang
发布于
2025年5月18日
许可协议