Cod sursa(job #2908599)

Utilizator Frant_IoanaFrant Ioana Frant_Ioana Data 4 iunie 2022 17:36:52
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.95 kb
#include <bits/stdc++.h>
using namespace std;
#define NMAX 100001

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

int n, q, cod, x, y, t[NMAX], lg[NMAX];

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

    return n;
}

void uneste(int x, int y){
    int ar = rad(x);
    int br = rad(y);

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

int main(){
    fin >> n >> q;

    for(int i = 1; i <= n; i++)
        t[i] = i, lg[i] = 1;

    while(q--){
        fin >> cod >> x >> y;
        if(cod == 1){
            uneste(x, y);
        }
        else{
            int ar = rad(x);
            int br = rad(y);
            
            if(ar == br)
                fout << "DA" << '\n';
            else
                fout << "NU" << '\n';
        }
    }
}