基础
// 基本并查集操作
银河英雄传说
// d[x]为位于x之前的战舰的数量
// s[x]记录该树的大小
int get(int x) {
if(x == f[x]) return f[x]; // 根节点直接返回
int root = get(f[x]); // 递归寻找根节点
d[x] += d[f[x]]; // 计算根节点到该点的边权和
return f[x] = root; // 路径压缩
}
void merge(int x, int y) {
x = get(x); y = get(y);
f[x] = y;
d[x] = s[y]; // 合并之后,x前有s[y]个节点
s[y] += s[x] // 更新s[y]
}
奇偶游戏