Cod sursa(job #2355058)

Utilizator Robys01Robert Sorete Robys01 Data 25 februarie 2019 19:54:55
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.78 kb
#include <fstream>

#define NMAX 100002
using namespace std;

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

int n, m, TT[NMAX], RG[NMAX];

int Find(int x){
    for(; TT[x] != x; x = TT[x]);
    return x;
}

void Unite(int x, int y){
    if(RG[x] > RG[y])
        TT[y] = x;
    else
        TT[x] = y;
    if(RG[x] == RG[y])
        RG[y]++;
}

int main(){
    cin>>n>>m;
    for(int i=1; i<=n; i++){
        TT[i] = i;
        RG[i] = 1;
    }

    for(int i=1; i<=m; i++){
        int p, x, y; cin>>p>>x>>y;

        if(p==1){
            Unite(Find(x), Find(y));
        }else{
            if(Find(x) != Find(y))
                cout<<"NU"<<'\n';
            else
                cout<<"DA"<<'\n';
        }
    }


    return 0;
}