Cod sursa(job #3254882)

Utilizator vlad_binVlad Bintintan vlad_bin Data 9 noiembrie 2024 09:40:40
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.88 kb
#include <bits/stdc++.h>

using namespace std;

int t[1'000'005], inalt[1'000'005];
int n, m;
int op, a, b;

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

void reuniune() {
    int ra = rad(a);
    int rb = rad(b);

    if (inalt[ra] > inalt[rb]) {
        t[rb] = ra;
    } else if (inalt[ra] < inalt[rb]) {
        t[ra] = rb;
    } else {
        t[ra] = rb;
        inalt[rb]++;
    }
}

bool interogare() {
    return rad(a) == rad(b);
}

int main() {
    auto in = ifstream("disjoint.in");
    auto out = ofstream("disjoint.out");

    in >> n >> m;

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

    while (m--) {
        in >> op >> a >> b;
        if (op == 1) {
            reuniune();
        } else {
            if (interogare())
                out << "DA\n";
            else
                out << "NU\n";
        }
    }
}