Cod sursa(job #3040423)

Utilizator AleXutzZuDavid Alex Robert AleXutzZu Data 29 martie 2023 21:06:42
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.82 kb
#include <iostream>
#include <vector>
#include <fstream>

int find_root(int node, std::vector<int> &roots) {
    int root = node;
    while (root != roots[root]) root = roots[root];

    while (node != root) {
        int t = roots[node];
        roots[node] = root;
        node = t;
    }

    return root;
}

int main() {
    std::ifstream input("disjoint.in");
    std::ofstream output("disjoint.out");

    int n, m;
    input >> n >> m;

    std::vector<int> roots(n + 1, 0);
    for (int i = 1; i <= n; ++i) roots[i] = i;

    while (m--) {
        int op, x, y;
        input >> op >> x >> y;
        int r1 = find_root(x, roots);
        int r2 = find_root(y, roots);

        if (op == 1) {
            roots[r1] = r2;
        } else {
            output << (r1 == r2 ? "DA" : "NU") << '\n';
        }
    }

    return 0;
}