并查集
初始化
List<Integer> father = new ArrayList<>();
for (int i = 0; i < n; i++) {
father.add(i);
}
查找
int find(int n) {
/*
//非递归写法
while(father.get(n) != n) {
n = father.get(n);
}
return n;
*/
//递归, 路径压缩
if (father.get(n) == n) {
return n;
}
father.set(n, find(father.get(n)));
return find(father.get(n));
}
合并
void union(int a, int b) {
int faA = find(a);
int faB = find(b);
if (faA != faB) {
father.set(faA, faB);
}
}