Cod sursa(job #3298499)

Utilizator badeaalesiaAlesia badeaalesia Data 30 mai 2025 16:32:16
Problema Paduri de multimi disjuncte Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.03 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int tati[100005], grad[100005];

int getroot(int nod)
{
    int root=nod;
    while(tati[root]!=nod)
        root=tati[root];
    while(nod!=tati[nod])
    {
        int tnod=tati[nod];
        tati[nod]=root;
        nod=tnod;
    }
    return root;
}

void unite(int x,int y)
{
    int rootx=getroot(x);
    int rooty=getroot(y);

    if(grad[rootx]<grad[rooty])
        tati[rootx]=rooty;
    else if(grad[rootx]>grad[rooty])
        tati[rooty]=rootx;
    else{tati[rootx]=rooty;
        grad[rooty]+=1;}

}

int main()
{
    int n,m;
    fin>>n>>m;
    for(int i=1;i<=n;i++)
    {
        tati[i]=i;
        grad[i]=1;
    }
    for(int i=0;i<m;i++)
    {
        int op,x,y;
        fin>>op>>x>>y;
        if(op==1)
            unite(x,y);
        else
            if(getroot(x)==getroot(y))
                fout<<"DA"<<endl;
            else fout<<"NU"<<endl;
    }
    return 0;
}