Cod sursa(job #2908598)

Utilizator matwudemagogul matwu Data 4 iunie 2022 17:25:42
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.84 kb
#include <bits/stdc++.h>
using namespace std;
#define MAX 100001

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

int n, q, c, a, b, t[MAX], lg[MAX];
int rad(int n){

    while(t[n] != n){
        t[n] = rad(t[n]);
        return t[n];
    }

    return n;
}
void uneste(int a ,int b){

    int ar = rad(a);
    int br = rad(b);

    if(lg[ar] > lg[br]) t[br] = ar, lg[ar] += lg[br];
    else t[ar] = br, lg[ar] += lg[br];

}
int main(){

    fin >> n >> q;

    for(int i = 1; i <= n; i++)
        t[i] = i , lg[i] = 1;
    
    while(q--){
        fin >> c >> a >> b;
        if(c == 1){
            uneste(a, b);
        }
        else{
            int ar = rad(a);
            int br = rad(b);

            if(ar == br) fout << "DA" << '\n';
            else fout << "NU" << '\n';
        }
    }
}