Cod sursa(job #3322613)

Utilizator AlexN_04Nedelcu Alex AlexN_04 Data 14 noiembrie 2025 23:51:19
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.97 kb
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

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

vector<int> h;
vector<int> tata;

int Find(int u) {
    if (tata[u] == 0) {
        return u;
    }
    tata[u] = Find(tata[u]);
    return tata[u];
}

void Union(int u, int v) {
    int ru = Find(u);
    int rv = Find(v);

    if (ru == rv) {
        return;
    }

    if (h[ru] < h[rv]) {
        tata[ru] = rv;
    } else if (h[ru] > h[rv]) {
        tata[rv] = ru;
    } else {
        tata[ru] = rv;
        h[rv]++;
    }

}
int main() {
    int N, Q;
    fin >> N >> Q;

    h.assign(N+1, 0);
    tata.assign(N+1, 0);

    for (int i = 0; i < Q; i++) {
        int q, x, y;
        fin >> q >> x >> y;
        if (q == 1) {
            Union(x, y);
        } else if (q == 2) {
            if (Find(x) == Find(y)) {
                fout << "DA\n";
            } else {
                fout << "NU\n";
            }
        }
    }
    return 0;
}