Cod sursa(job #1652775)

Utilizator LolkekzorChiorean Tudor Lolkekzor Data 15 martie 2016 13:51:11
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb
#include <fstream>
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");

int n, m, i, q, x, y;
int arbore[100100], rang[100100];

int root(int val) {
    int R = val, aux;
    while (R != arbore[R])
        R = arbore[R];

    while (val != arbore[val]) {
        aux = val;
        val = arbore[val];
        arbore[aux] = R;
    }

    return R;
}

void couple(int x, int y) {
    if (rang[x] > rang[y])
        arbore[y] = x;
    else
        arbore[x] = y;

    if (rang[x] == rang[y])
        rang[y]++;
}

int main()
{
    fin>>n>>m;
    for (i = 1 ; i <= n ; i++) {
        arbore[i] = i;
        rang[i] = 1;
    }

    for (i = 1 ; i <= m ; i++) {
        fin>>q>>x>>y;
        if (q == 1) {
            couple(root(x), root(y));
        } else {
            if (root(x) == root(y))
                fout<<"DA\n";
            else
                fout<<"NU\n";
        }
    }

    return 0;
}