并查集 DSU
Union-Find算法实现
以下是带路径压缩的并查集实现,需要背下来。
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;
}
习题 | ||||||
---|---|---|---|---|---|---|
【模板】并查集 | 普及- | |||||
P3958 | NOIP-S | 奶酪 | 2017 | 普及/提高- | ||
P1955 | NOI | 程序自动分析 | 2015 | 普及+/提高 | ||
P1197 | JSOI | 星球大战 | 2008 | 普及+/提高 | ||
P1196 | NOI | 银河英雄传说 | 2002 | 普及+/提高 | ||
P5937 | CEOI | Parity Game | 1999 | 普及+/提高 | ||
P1525 | NOIP-S | 关押罪犯 | 2010 | 普及+/提高 | ||
P2024 | NOI | 食物链 | 2001 | 提高+/省选- | ||
UVA11987 | UVA | Almost Union-Find | 提高+/省选- | |||
CF722C | CF | Destroying Array | 提高+/省选- | |||
P4185 | USACO Gold | Mootube | 2018 | 提高+/省选- | 解答 |