Cod sursa(job #2082560)

Utilizator andreiiiiPopa Andrei andreiiii Data 6 decembrie 2017 15:56:30
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.71 kb
#include <fstream>
#include <vector>
using namespace std;

int main() {
    ifstream fin("disjoint.in");
    ofstream fout("disjoint.out");
    int n, q;
    fin >> n >> q;

    vector<int> f(n);
    for (int i = 0; i < n; ++i) {
        f[i] = i;
    }
    auto find = [&f](int x) -> int {
        int y, p;
        for (y = x; y != f[y]; y = f[y]);
        for (; x != y; x = p) {
            p = f[x];
            f[x] = y;
        }
        return y;
    };

    while (q-- > 0) {
        int t, x, y;
        fin >> t >> x >> y;
        x--; y--;
        if (t == 1) {
            f[find(x)] = y;
        } else {
            fout << (find(x) == find(y) ? "DA\n": "NU\n");
        }
    }

    fin.close();
    fout.close();
}