package algo; /** * Created by sherxon on 1/29/17. */ public class UnionFind { int[] a; int[] sz; public UnionFind(int size) { a = new int[size + 1]; sz = new int[size + 1]; for (int i = 0; i < a.length; i++) { a[i] = i; sz[i] = 1; } } public void union(int i, int j) { int ip = find(i); int jp = find(j); if (sz[ip] < sz[jp]) { a[ip] = jp; sz[jp] += sz[ip]; } else { sz[ip] += sz[jp]; a[jp] = a[ip]; } } private int find(int i) { while (a[i] != i) { a[i] = a[a[i]]; i = a[i]; } return i; } public boolean connected(int i, int j) { return find(i) == find(j); } }