最简易的实现, 仅路径压缩.
class DSU {
public:
std::vector<int> d;
DSU(std::size_t size) : d(size + 1) {
std::iota(d.begin(), d.end(), 0);
}
int root(int u) {
return d[u] == u ? u : d[u] = root(d[u]);
}
void bind(int u, int v) {
d[root(u)] = root(v);
}
};