Cod sursa(job #2926817)

Utilizator SeracovanuEdwardSeracovanu Edward SeracovanuEdward Data 18 octombrie 2022 18:52:04
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.79 kb
#include <bits/stdc++.h>

using namespace std;

int const nmax = 1e5 + 5;

int n , q;
int T[nmax];
int R[nmax];

int rad(int nod){
if(T[nod] == nod)return nod;
int p = rad(T[nod]);
T[nod] = p;
return p;
}

int main()
{
    freopen("disjoint.in" , "r" , stdin);
    freopen("disjoint.out" , "w" ,stdout);
    cin.tie(0)->sync_with_stdio(0);
    cout.tie(0);
    cin >> n >> q;
    for(int i = 1;i <= n; ++i)T[i] = i;
    while(q--){
        int cod , x , y;
        cin >> cod >> x >> y;
        if(cod == 1){
            int p = rad(x);
            int q = rad(y);
            if(R[p] > R[q])
                T[q] = p;
            else if(R[p] < R[q])T[p] = q;
                    else
                        T[p] = q , R[q]++;
        }
        else cout << (rad(x) == rad(y) ? "DA" : "NU") << "\n";
    }
}