Cod sursa(job #1764416)

Utilizator Al3ks1002Alex Cociorva Al3ks1002 Data 25 septembrie 2016 15:08:21
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 kb
#include <stdio.h>
#include <bits/stdc++.h>

using namespace std;

class DisjointSet {
    public:
        DisjointSet(int size) : size_(size + 1) {
            father_.resize(size_);
            for (int i = 0; i < size_; i++) {
                father_[i] = i;
            }
        }

        int Find(int x) {
            if (father_[x] != x) {
                father_[x] = Find(father_[x]);
            }
            return father_[x];
        }

        void Unite(int x, int y) {
            father_[x] = y;
        }

    private:
        int size_;
        vector<int> father_;
};

int main() {
    ifstream cin("disjoint.in");
    ofstream cout("disjoint.out");

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

    DisjointSet ds(n);
    for (; m; m--) {
        int op, x, y;
        cin >> op >> x >> y;

        if (op == 1) {
            ds.Unite(ds.Find(x), ds.Find(y));
        } else {
            cout << (ds.Find(x) == ds.Find(y) ? "DA" : "NU") << '\n';
        }
    }

    return 0;
}