Cod sursa(job #2981654)

Utilizator Stefan314159Stefan Bisti Stefan314159 Data 18 februarie 2023 14:00:20
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.78 kb
#include <iostream>
#include <fstream>
#include <map>
#include <vector>
using namespace std;

#define N 100001

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

int n, qr, t[N], rang[N];

int radacina(int x){
    if(t[x] == 0)
        return x;

    int k = radacina(t[x]);
    t[x] = k;
    return k;
}

void unire(int x, int y){
    int rx = radacina(x);
    int ry = radacina(y);

    if(rang[rx] > rang[ry])
        t[rx] = ry;
    else
        t[ry] = rx;

    if(rang[rx] < rang[ry])
        rang[ry]++;
}


int main(){
    in >> n >> qr;

    while(qr--){
        int q, x, y;
        in >> q >> x >> y;
        if(q == 1)
            unire(x, y);
        else
            out << (radacina(x) == radacina(y) ? "DA\n" : "NU\n");
    }
}