Cod sursa(job #2311406)

Utilizator fishy15Aaryan Prakash fishy15 Data 3 ianuarie 2019 05:06:47
Problema Paduri de multimi disjuncte Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.04 kb
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

int n, m;
vector<int> nums;
vector<int> size;

int find(int x) {
    if (nums[x] == x) {
        return x;
    }

    nums[x] = find(nums[x]);
    return nums[x];
}

void join(int x, int y) {
    if (find(x) == find(y)) {
        return;
    }

    if (size[x] > size[y]) {
        nums[y] = nums[x];
        size[x] += size[y];
    } else {
        nums[x] = nums[y];
        size[y] += size[x];
    }
}

int main() {
    ifstream fin("disjoint.in");
    ofstream fout("disjoint.out");

    int n, m; fin >> n >> m;
    nums = vector<int>(n);
    size = vector<int>(n);
    for (int i = 0; i < n; i++) {
        nums[i] = i;
        size[i] = 1;
    }

    for (int i = 0; i < m; i++) {
        int op, a, b; fin >> op >> a >> b;
        if (op == 1) {
            join(a - 1, b - 1);
        } else {
            if (find(a - 1) == find(b - 1)) {
                fout << "DA\n";
            } else {
                fout << "NU\n";
            }
        }
    }

    return 0;
}