Cod sursa(job #3254872)

Utilizator Xutzu358Ignat Alex Xutzu358 Data 9 noiembrie 2024 09:36:38
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.98 kb
#include <iostream>
using namespace std;

int n, m;
int t[1000005], inalt[1000005];
int cod, x, y;

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

void reuniune() {
    int rx = rad(x);
    int ry = rad(y);
    if (inalt[rx] > inalt[ry]) {
        t[ry] = rx;
    }
    else if (inalt[ry] > inalt[rx]) {
        t[rx] = ry;
    }
    else {
        t[ry] = rx;
        inalt[rx]++;
    }
}

bool interogare() {
    return (rad(x) == rad(y));
}

int main() {
    freopen("disjoint.in", "r", stdin);
    freopen("disjoint.out", "w", stdout);
    cin >> n >> m;
    for (int i=1;i<=n;i++) 
        t[i] = i;
    for (;m;m--) {
        cin >> cod >> x >> y;
        if (cod == 1) {
            reuniune();
        }
        else {
            if (interogare()) {
                cout << "DA\n";
            }
            else cout << "NU\n";
        }
    }
    return 0;
}