DisjointSet

#include <cstdio>

class DisjointSet
{
    int *parent, V,totalSets;

    int findParent(int u)
    {
        if(u==parent[u]) return u;
        return parent[u]=findParent(parent[u]);
    }

public:
    DisjointSet(int V_=100)
    {
        V=V_, parent=new int[V+5];
        initialize(V);
    }

    void initialize(int V_=0)
    {
        if(!V_) V_=V;
        for(int i=0;i<V_;i++) parent[i]=i;
        totalSets=V_;
    }

    bool uniteNodes(int u,int v)
    {
        int pu=findParent(u), pv=findParent(v);
        if(pu==pv) return false;

        parent[pu]=pv;
        return true;
    }

    bool inSameSet(int u,int v)
    {
        int pu=findParent(u), pv=findParent(v);
        return pu==pv;
    }
};

int main()
{
    /* code */
    return 0;
}