并查集

并查集 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;
}
习题
【模板】并查集普及-
P3958NOIP-S奶酪2017普及/提高-
P1955NOI程序自动分析2015普及+/提高
P1197JSOI星球大战2008普及+/提高
P1196NOI银河英雄传说2002普及+/提高
P5937CEOIParity Game1999普及+/提高
P1525NOIP-S关押罪犯2010普及+/提高
P2024NOI食物链2001提高+/省选-
UVA11987UVAAlmost Union-Find提高+/省选-
CF722CCFDestroying Array提高+/省选-
P4185USACO GoldMootube2018提高+/省选-解答