public class UnionFind {
private int[] father = null;
public int find (int x) {
if (father[x] == x) {
return x;
}
return father[x] = find(father[x]); // path compression
}
public void union(int a, int b) {
int rootA = find(a);
int rootB = find(b);
if (rootA != rootB) {
father[rootA] = rootB;
}
}
public boolean isUnion(int a, int b) {
return find(a) == find(b);
}
}