并查集模板
注意理解路径压缩
static class UnionFind {
int[] fa;
public UnionFind(int n) {
fa = new int[n];
for (int i = 0; i < n; i++) {
fa[i] = i;
}
}
public int find(int i) {
if (fa[i] != i) {
fa[i] = find(fa[i]);
}
return fa[i];
}
public void union(int i, int j) {
int fai = find(i);
int faj = find(j);
if (fai != faj) {
fa[fai] = faj;
}
}
}