Cod sursa(job #1876382)

Utilizator o_micBianca Costin o_mic Data 12 februarie 2017 12:30:26
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.04 kb
#include <iostream>
#include <fstream>
#include <set>
#include <vector>
#include <cmath>
#include <map>
#include <cstring>
#include <queue>
#include <algorithm>
#define DN 100005
#define x first
#define y second
#define LL long long
 
using namespace std;

int parent[DN];

int get_parent(int x) {
    if (parent[x] == 0)
        return x;

    parent[x] = get_parent(parent[x]);
    return parent[x];
}

void set_parent(int b, int a) {
    if (parent[b] == 0)
        parent[b] = get_parent(a);
    else {
        set_parent(parent[b], a);
        parent[b] = parent[parent[b]];
    }
}

int main() {
    int n, m, t, a, b;
    // freopen("input.txt", "r", stdin);
    ifstream fin("disjoint.in");
    ofstream fout("disjoint.out");

    fin >> n >> m;
    for (int i = 0; i < m; ++i) {
        fin >> t >> a >> b;

        if (t == 1) {
            set_parent(a, b);
        } else {
            if (get_parent(a) == get_parent(b))
                fout << "DA";
            else
                fout << "NU";
            fout << '\n';
        }
    }
    return 0;
}