Cod sursa(job #2249476)

Utilizator cosmin.pascaruPascaru Cosmin cosmin.pascaru Data 29 septembrie 2018 22:16:19
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.23 kb
#include <stdio.h>
#include <iostream>
#include <fstream>
#include <vector>
#include <array>
#include <algorithm>
#include <vector>
#include <stack>
#include <set>
#include <assert.h>
#include <queue>
#include <chrono>
#include <memory>
 
using LL = long long;
using ULL = int long long;
 
const std::string _problemName = "disjoint";
 
namespace std {
std::ifstream fin(_problemName + ".in");
std::ofstream fout(_problemName + ".out");
}
 
#define USE_FILES
 
#ifdef USE_FILES
#define cin fin
#define cout fout
#endif

std::vector<int> parents;

int find(int a) {
    if (a == parents[a]) {
        return a;
    }

    parents[a] = find(parents[a]);
    return parents[a];
}

void join(int a, int b) {
    a = find(a);
    b = find(b);

    parents[a] = b;
}

int main() {

    int n, m;
    std::cin >> n >> m;

    parents.resize(n);

    for (int idx = 0; idx < n; ++idx) {
        parents[idx] = idx;
    }

    while (m--) {
        int op, a, b;
        std::cin >> op >> a >> b;

        --a, --b;
        
        if (op == 1) {
            join(a, b);
        }
        else {
            std::cout << ((find(a) == find(b)) ? "DA" : "NU") << '\n';
        }
    }
    return 0;
}