Cod sursa(job #3364423)

Utilizator filipdanieloanFilip-Daniel Oancea filipdanieloan Data 3 septembrie 2026 09:16:57
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.92 kb
#include <bits/stdc++.h>
using namespace std;

struct Padure {
    vector<int> padre;

    Padure(int n) {
        padre.resize(n + 1);
    }

    int rad(int a) {
        if (padre[a] == 0) {
            return a;
        }
        padre[a] = rad(padre[a]);
        return padre[a];
    }

    void join(int a, int b) {
        a = rad(a);
        b = rad(b);

        if (a != b) {
            padre[a] = b;
        }
    }

    bool query(int a, int b) {
        return rad(a) == rad(b);
    }
};

signed main() {
#ifndef LOCAL
    cin.tie(nullptr)->sync_with_stdio(false);
    freopen("disjoint.in", "r", stdin);
    freopen("disjoint.out", "w", stdout);
#endif

    int n, m; cin >> n >> m;
    Padure DSU(n);

    while (m--) {
        int op, x, y; cin >> op >> x >> y;
        if (op == 1) {
            DSU.join(x, y);
        } else {
            cout << (DSU.query(x, y) ? "DA" : "NU") << '\n';
        }
    }

    return 0;
}