Cod sursa(job #3343902)

Utilizator ShAwDoRneYNacu Gabriel ShAwDoRneY Data 28 februarie 2026 18:14:32
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.07 kb
#include <iostream>
#include <vector>
using namespace std;

const int NMAX = 1e5+5;
int N,M;
vector<int> parent(NMAX, -1);
vector<int> marime(NMAX, 1);

int get_rep(int node) {
    if (parent[node] == -1)
        return node;
    return parent[node] = get_rep(parent[node]);
}

void combine(int a, int b) {
    if (a == b)
        return;
    if (marime[a] >= marime[b]) {
        parent[b] = a;
        marime[a] += marime[b];
    }
    else {
        parent[a] = b;
        marime[b] += marime[a];
    }

}


int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);

    freopen("disjoint.in", "r", stdin);
    freopen("disjoint.out", "w", stdout);

    cin >> N >> M;

    for (int i=1; i<=M; i++) {
        int op,a,b;
        cin >> op >> a >> b;
        int rep_a = get_rep(a);
        int rep_b = get_rep(b);
        if (op == 1) {
            combine(rep_a, rep_b);
        }
        else {
            if (rep_a == rep_b)
                cout << "DA" << "\n";
            else
                cout << "NU" << "\n";
        }
    }

    return 0;
}