public class UnionFindSet{ private int[] parents; private Map map; public UnionFindSet(int capacity, Map map){ parents = new int[capacity]; this.map = map; for (int i = 0; i < capacity; i++) parents[i] = i; } public void union(E value1,int value2){ int parent1 = findParent(map.get(value1)); int parent2 = findParent(map.get(value2)); if(parent1 == parent2) return ; parents[parent2] = parent1; } public int findParent(E value){ int index = map.get(value); while(index != parents[index]){ index = parents[index]; } return index; } public int setSize(){ int size = 0; for (int i = 0; i < parents.length; i++) { if(i == parents[i]) { size++; } } return size; } }



