Cod sursa(job #2419681)

Utilizator EneRaduEne Radu Alexandru EneRadu Data 9 mai 2019 11:09:32
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1 kb
#include <fstream>

using namespace std;

ifstream cin("disjoint.in");
ofstream cout("disjoint.out");

int tata[100001],grad[100001];

int findf(int nod){
    if(tata[nod]==nod)
        return nod;
    int x=findf(tata[nod]);
    tata[nod]=x;
    return x;
}

int main()
{
    int n,m,cod,x,y;
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        tata[i]=i;
        grad[i]=1;
    }
    for(int i=1;i<=m;i++){
        cin>>cod>>x>>y;
        if(cod==1){
            int fx,fy;
            fx=findf(x);
            fy=findf(y);
            if(grad[fx]<grad[fy]){
                tata[fx]=fy;
                grad[fy]+=grad[fx];
            }
            else{
                tata[fy]=fx;
                grad[fx]+=grad[fy];
            }
        }
        if(cod==2){
            int tatax=findf(x);
            int tatay=findf(y);
            if(tatax==tatay)
                cout<<"DA"<<"\n";
            else
                cout<<"NU"<<"\n";
        }
    }
    return 0;
}