Cod sursa(job #2401071)

Utilizator mihaidanielmihai daniel mihaidaniel Data 9 aprilie 2019 13:31:32
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.74 kb
#include <iostream>
#include <fstream>

using namespace std;

int t[100010], nr[100010];

int find_f (int x)
{
    return (x == t[x]) ? x : t[x] = find_f (t[x]);
}

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

    int n, m, o, x, y, i;

    in >> n >> m;
    for (i = 1; i <= n; ++i) {
        t[i] = i;
        nr[i] = 1;
    }

    for (i = 0; i < m; ++i) {
        in >> o >> x >> y;
        if (o == 1) {
            x = find_f (x);
            y = find_f (y);
            if (x > y) {t[y] = x; nr[x] += nr[y];}
            else {t[x] = y; nr[y] += nr[x];}
        }
        else {
            out << ((find_f(x) == find_f(y)) ? "DA\n" : "NU\n");
        }
    }

    return 0;
}