September 28, 2019

Union Find

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);
    }
}
comments powered by Disqus