Cod sursa(job #3254876)

Utilizator axetyNistor Iulian axety Data 9 noiembrie 2024 09:37:53
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1 kb
#include <fstream>

using namespace std;

ifstream fin ("disjoint.in");
ofstream fout ("disjoint.out");

int n,m;
const int NMAX=100003;
int tata[NMAX+1],inalt[NMAX+1];
int cod,x,y;

int rad(int nod){

    if(nod==tata[nod])
        return nod;

    int rnod=rad(tata[nod]);

    tata[nod]=rnod;

    return rnod;
}

void reuniune(){

    int rx=rad(x);
    int ry=rad(y);

    if(inalt[rx] > inalt[ry])
    {
        tata[ry]=rx;
    }
    else if(inalt[rx] < inalt[ry])
    tata[rx]=ry;
    else{
        tata[ry]=rx;
        inalt[rx]++;
    }
}


bool interogare(){
    return (rad(x) == rad(y));
}

int main(){
    fin >> n >> m;
    for(int i=1;i<=n;i++)
        tata[i]=i;
    for(int i=1;i<=m;i++)
    {
        fin>>cod>>x>>y;
        if(cod==1){
            reuniune();
        }
        else{
            if(interogare())
                fout <<"DA\n";
            else
                fout << "NU\n";
            
        }   
    }
    return 0;
}