C++ Program to Implement Disjoint Set Data Structure

Disjoint set is basically as group of sets where no item can be in more than one set. It supports union and find operation on subsets.

Find(): It is used to find in which subset a particular element is in and returns the representative of that particular set.

Union(): It merges two different subsets into a single subset and representative of one set becomes representative of other.

Functions and pseudocodes

   Assume k is the element
      k.parent = k.
   If k.parent == k
      return k.
   return Find(k.parent)
   Union (a,b):
      Take two set a and b as input.
      aroot = Find(a)
      broot = Find(b)
      aroot.parent = broot


#include <iostream>
#include <vector>
#include <unordered_map>
using namespace std;
class DisjointSet { //to represent disjoint set
   unordered_map<int, int> parent;
   void makeSet(vector<int> const &wholeset){
   //perform makeset operation
      for (int i : wholeset) // create n disjoint sets
      (one for each item)
      parent[i] = i;
   int Find(int l) { // Find the root of the set in which element l belongs
      if (parent[l] == l) // if l is root
         return l;
      return Find(parent[l]); // recurs for parent till we find root
   void Union(int m, int n) { // perform Union of two subsets m and n  
      int x = Find(m);
      int y = Find(n);
      parent[x] = y;
void print(vector<int> const &universe, DisjointSet &dis) {
   for (int i : universe)
   cout << dis.Find(i) << " ";
   cout << '\n';
int main() {
   vector<int> wholeset = { 6,7,1,2,3 }; // items of whole set
   DisjointSet dis; //initialize DisjointSet class
   dis.makeSet(wholeset); // create individual set of the items of wholeset
   dis.Union(7, 6); // 7,6 are in same set
   print(wholeset, dis);
   if (dis.Find(7) == dis.Find(6)) // if they are belong to same set or not.
   if (dis.Find(3) == dis.Find(4))
   return 0;


6 6 1 2 3