Cod sursa(job #2311403)

Utilizator fishy15Aaryan Prakash fishy15 Data 3 ianuarie 2019 03:28:27
Problema Paduri de multimi disjuncte Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.89 kb
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

int n, m;
vector<int> nums;

void join(int x, int y) {
    int min = nums[x] < nums[y] ? nums[x] : nums[y];
    nums[x] = min;
    nums[y] = min;
}

bool joined(int x, int y) {
    while (nums[x] != x) {
        x = nums[x];
    }

    while (nums[y] != y) {
        y = nums[y];
    }

    return x == y;
}

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

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

    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 (joined(a - 1, b - 1)) {
                fout << "DA\n";
            } else {
                fout << "NU\n";
            }
        }
    }

    return 0;
}