Cod sursa(job #2353189)

Utilizator eduardandrei20Nechifor Eduard Andrei eduardandrei20 Data 23 februarie 2019 23:03:24
Problema Paduri de multimi disjuncte Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.18 kb
#include <iostream>
#include <fstream>

using namespace std;

const int dim = 100001;
int t[dim], nrMultimi, nrQuery;

int root(int nod) {
    /* Functie ce leaga 2 noduri in acelasi arbore
    Returneaza radacina acelui arbore*/

    int radacina = nod, next;
    while (t[radacina] != radacina) {
        radacina = t[radacina];
    }
    while (t[nod] != nod) {
        next = t[nod];
        t[nod] = radacina;
        nod = next;
    }
    return radacina;
}

void unite(int x, int y) {
    /* Functie ce uneste 2 multimi*/

    t[y] = x;
}

int main() {
    freopen("disjoint.in", "r", stdin);
    freopen("disjoint.out", "w", stdout);

    for (int i = 1; i <= dim; i++) {
        t[i] = i;
    }

    cin >> nrMultimi >> nrQuery;
    for (int i = 1; i <= nrQuery; i++) {
        int x, y, cod;
        cin >> cod >> x >> y;
        if (cod == 1) {
            if (root(x) != root(y)) {
                    unite(root(x),root(y));
            }
        } else if (cod == 2) {
            if (root(x) == root(y)) {
                cout << "DA\n";
            } else {
                cout << "NU\n";
            }
        }
    }

    return 0;
}