Cod sursa(job #3319710)

Utilizator alexdraguAlexandru Dragu alexdragu Data 2 noiembrie 2025 19:22:19
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.75 kb
#include <fstream>

using namespace std;
ifstream cin("disjoint.in");
ofstream cout("disjoint.out");
int n,q,i,r[100005],cer,x,y,t[100005];
int root(int x)
{
    if(t[x]==0) return x;
    return t[x]=root(t[x]);
}
void unire(int x,int y)
{
    int rx=root(x),ry=root(y);
    if(rx==ry)
    {
        return;
    }
    if(r[rx]>r[ry])
    {
        r[rx]+=r[ry];
        t[ry]=rx;
    }
    else
    {
        r[ry]+=r[rx];
        t[rx]=ry;
    }
}
int main()
{
    cin>>n>>q;
    for(i=1;i<=n;i++) r[i]=i;
    while(q--)
    {
        cin>>cer>>x>>y;
        if(cer==1) unire(x,y);
        else
        {
            if(root(x)==root(y)) cout<<"DA"<<'\n';
            else cout<<"NU"<<'\n';
        }
    }
    return 0;
}