Cod sursa(job #3349290)

Utilizator rapidu36Victor Manz rapidu36 Data 27 martie 2026 17:59:07
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.86 kb
#include <fstream>

using namespace std;

const int N = 100000;

int t[N+1], h[N+1];

int radacina(int x) {
    if (t[x] == 0) {
        return x;
    }
    return radacina(t[x]);
}

int main() {
    ifstream in("disjoint.in");
    ofstream out("disjoint.out");
    int n, q;
    in >> n >> q;
    for (int i = 0; i < q; i++) {
        int tip, x, y;
        in >> tip >> x >> y;
        int rx = radacina(x);
        int ry = radacina(y);
        if (tip == 1) {
            if (h[rx] <= h[ry]) {
                t[rx] = ry;
                if (h[rx] == h[ry]) {
                    h[ry]++;
                }
            } else {
                t[ry] = rx;
            }
        } else {
            if (rx == ry) {
                out << "DA\n";
            } else {
                out << "NU\n";
            }
        }
    }
    in.close();
    out.close();
    return 0;
}