Пример #1
0
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]++;
         }
     }
 }