void UnionFind::unionSet(int i, int j) { if(!isSameSet(i, j)) { --numSets; int set1 = findSet(i); int set2 = findSet(j); if(rank[set1] > rank[set2]) { parent[set2] = set1; setSize[set1] += setSize[set2]; } else { parent[set1] = set2; setSize[set2] += setSize[set1]; } if(rank[set1] == rank[set2]) { rank[set2]++; } } }
void unionSet(int i, int j) { if (!isSameSet(i, j)) { numSets--; int x = findSet(i), y = findSet(j); // rank is used to keep the tree short if (rank[x] > rank[y]) { p[y] = x; setSize[x] += setSize[y]; } else { p[x] = y; setSize[y] += setSize[x]; if (rank[x] == rank[y]) rank[y]++; } } }