Cod sursa(job #3271677)

Utilizator mihaihvhTuburlui Mihai mihaihvh Data 26 ianuarie 2025 21:11:13
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.77 kb
#include <fstream>
#include <vector>
#include <climits>

using namespace std;

fstream cin("disjoint.in");
ofstream cout("disjoint.out");

int t[100001], r[100001];
int n, m, p;

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

void prn(int a, int b) {
    if (r[a] > r[b])
        t[a] = b;
    else if (r[a] < r[b])
        t[b] = a;
    else {
        t[b] = a;
        ++r[a];
    }
}

int main() {
    cin >> n >> m;

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

    for (int i = 1; i <= m; ++i) {
        int a, b;
        cin >> p >> a >> b;
        if (p == 1) prn(rad(a), rad(b));
        else cout << (rad(a) == rad(b) ? "DA" : "NU") << '\n';
    }

    return 0;
}