Cod sursa(job #2417080)

Utilizator fremenFremen fremen Data 28 aprilie 2019 20:46:23
Problema Paduri de multimi disjuncte Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.09 kb
#include <fstream>
#include <cstring>
#include <algorithm>
using namespace std;

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

const int MAXN = 100005;
int n, m;
int v[MAXN];
int p[MAXN];

int parent(int k) {
    int t = p[k];
    while (t != p[t]) {
        t = p[t];
    }
    while (p[k] != t) {
        int r = k;
        k = p[k];
        p[r] = t;
    }
    return t;
}

int main() {

    fin >> n >> m;

    for (int i = 1; i <= n; ++i) {
        p[i] = i;
        v[i] = 1;
    }

    for (int i = 1; i <= m; ++i) {
        int a, b, c;
        fin >> a >> b >> c;
        if (a == 1) {
            if (v[b] > v[c]) {
                p[b] = parent(c);
                v[c]++;
            }
            else {
                p[c] = parent(b);
                v[b]++;
            }
        }
        else {
            if (parent(b) == parent(c)) {
                fout << "DA";
            }
            else {
                fout << "NU";
            }
            fout << '\n';
        }
    }

    fout.close();
    return 0;
}