并查集
Find-Union算法实现
以下是带路径压缩的并查集实现,需要背下来。
int fa[MAXN];
int find(int x) {
if (x == fa[x])
return x;
else
return fa[x] = find(fa[x]); // 查找 x 的祖先直到找到代表,顺手路径压缩
}
void union(int x, int y) {
x = find(x);
y = find(y);
fa[x] = y;
}
void init(int size) {
for (int i = 0; i < size; i++)
fa[i] = i;
return;
}
例题
- P3367 【模板】并查集 普及-
- P3958 [NOIP2017 提高组] 奶酪 普及/提高-
- P1955 [NOI2015] 程序自动分析 普及+/提高
- P1197 [JSOI2008]星球大战 普及+/提高
-
UVA11987 Almost Union-Find 提高+/省选-
-
P1196 [NOI2002] 银河英雄传说 普及+/提高
- P2024 [NOI2001] 食物链 提高+/省选-
- P5937 [CEOI1999]Parity Game 普及+/提高
- P1525 [NOIP2010 提高组] 关押罪犯 普及+/提高
- CF722C Destroying Array 提高+/省选-