https://www.codechef.com/UATG001/problems/DSUBAGS

#include
#include<bits/stdc++.h>
using namespace std;
//https://www.codechef.com/UATG001/problems/DSUBAGS
class union_find
{
vectorpar;
vectorsiz;
int n;
public:
union_find(int x)
{
n=x;
par.resize(n+1);
siz.resize(n+1);
for(int i=0;i<=n;i++)
{
par[i]=i;siz[i]=1;
}
}

int root(int x)
{
   if(x==par[x])
   return x;

   return par[x]=root(par[x]);
}

bool find(int a,int b)
{
    return par[a]==par[b];
}

void un(int a,int b)
{
    int ra=root(a);
    int rb=root(b);
    if(ra==rb)
    return;
    if(siz[ra]>siz[rb])
    {
        swap(ra,rb);
    }
    par[rb]=ra;
    siz[rb]+=siz[ra];
}

int getNumberOfSets()
{
    unordered_map<int,int>m;
    int cmax=0;
    for(int i=1;i<=n;i++)
    m[par[i]]++;
    
    return m.size();

}

};

int main() {
int n,q;
cin>>n>>q;
union_find obj(n);
for(int it=1;it<=q;it++)
{
int qt;
cin>>qt;
if(qt==1)
{
int a,b;
cin>>a>>b;
obj.un(a,b);
}
else if(qt==2)
{
int a,b;
cin>>a>>b;
if(obj.find(a,b))
cout<<“YES”<<’\n’;
else
{
cout<<“NO”<<’\n’;
}

    }
    else
    {
        cout<<obj.getNumberOfSets()<<'\n';
    }
    

}
return 0;

}
TLE Why?

The contest is restricted. Share problem.