Cod sursa(job #311363)

Utilizator sandyxpSanduleac Dan sandyxp Data 3 mai 2009 12:25:04
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.79 kb
#include <fstream>
using namespace std;

#define NUME "disjoint"
ifstream fi(NUME".in");
ofstream fo(NUME".out");
#define MAXN 100001

int N, M;
int T[MAXN], rang[MAXN];

void init()
{
    int i;
    for (i = 1; i <= N; ++i) {
        T[i] = i;
        rang[i] = 1;
    }
}

int multime(int a) {
    if (T[a] != T[T[a]])
        T[a] = multime(T[a]);
    return T[a];
}

void uneste(int a, int b) {
    a = multime(a);
    b = multime(b);
    if (a == b) return;
    if (rang[a] < rang[b])
        T[a] = b;
    else
        T[b] = a;
}

int main()
{
    fi >> N >> M;
    init();
    int op, a, b;
    while (M--) {
        fi >> op >> a >> b;
        if (op == 1) {
            uneste(a, b);
        } else {
            fo << (multime(a) == multime(b) ? "DA" : "NU") << "\n";
        }
    }
    return 0;
}