Cod sursa(job #3347548)

Utilizator moloDaniMolodet Andrei Daniel moloDani Data 17 martie 2026 10:55:53
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.84 kb
#include <fstream>

using namespace std;

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

const int mxN = 1e5 + 1;

int tati[mxN], ranc[mxN], n, q;

void init_dsu(){
    for(int i = 1; i <= n; i++){
        tati[i] = i;
        ranc[i] = 1;
    }
}

int find(int a){
    while(tati[a] != a)
        a = tati[a];

    return a;
}

void link(int a, int b){
    int rA = find(a), rB = find(b);

    if(ranc[rA] < ranc[rB])
        swap(rA, rB);

    if(ranc[rA] == ranc[rB])
        ranc[rA]++;
    
    tati[rB] = rA;
}

void query(int a, int b){
    if(find(a) == find(b))
        fout << "DA\n";
    else
        fout << "NU\n";
}

int main(){
    int a, b, t;
    fin >> n >> q;
    init_dsu();

    for(int i = 1; i <= q; i++){
        fin >> t >> a >> b;
        if(t == 1)
            link(a, b);
        else
            query(a, b);
    }
}