Cod sursa(job #2905042)

Utilizator the4Designerthe4Designer the4Designer Data 19 mai 2022 09:10:45
Problema Paduri de multimi disjuncte Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.03 kb
#include <bits/stdc++.h>
// #include <vector>
using namespace std;

#define NMAX 100005

int parents[NMAX];
int ranks[NMAX];

int find(int x) {
    while (x != parents[x]) {
        x = parents[x];
    }

    return x;
}

void unite(int x, int y) {
    if (ranks[x] < ranks[y]) {
        parents[x] = parents[y];
        ranks[y] += ranks[x];
    } else {
        parents[y] = parents[x];
        ranks[x] += ranks[y];
    }
}

int main(void) {
    freopen("disjoint.in", "r", stdin);
    freopen("disjoint.out", "w", stdout);

    int n; cin >> n;
    int m; cin >> m;

    for (int i = 1; i <= n; ++i) {
        parents[i] = i;
        ranks[i] = 0;
    }

    for (int i = 0; i < m; ++i) {
        int op; cin >> op;
        int x, y; cin >> x >> y;

        if (op == 1) {
            unite(x, y);
        } else {
            if (find(x) == find(y)) {
                cout << "DA" << '\n';
            } else {
                cout << "NU" << '\n';
            }
        }
    }

    return 0;
}