Cod sursa(job #2706308)

Utilizator MariusblockMoga Marius-Ioan Mariusblock Data 14 februarie 2021 16:10:17
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.87 kb
#include <bits/stdc++.h>

using namespace std;

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

int TT[100005];
int H[100005];

int root(int a){
    while(TT[a] != a){
        a = TT[a];
    }
    return a;
}

void unite(int a, int b){
    a=root(a);
    b=root(b);
    if(H[a] > H[b]){
        TT[b] = a;
        H[a] = max(H[a],H[b]+1);
    }else{
        TT[a] = b;
        H[b] = max(H[b],H[a]+1);
    }
}

int main() {
    int n,m,x,y,cod,i;
    fin>>n>>m;
    for(i = 1; i <= n; i++){
        TT[i]=i;
        H[i]=1;
    }
    for(i = 1; i <= m; i++){
        fin>>cod>>x>>y;
        if(cod == 1){
            unite(x,y);
        }else if(cod == 2){
            if(root(x) == root(y)){
                fout<<"DA"<<'\n';
            }else{
                fout<<"NU"<<'\n';
            }
        }
    }
    return 0;
}