Cod sursa(job #819192)

Utilizator mardareoctavR. Mardare mardareoctav Data 18 noiembrie 2012 17:22:17
Problema Paduri de multimi disjuncte Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
#include <fstream>
#define NMAX 100011

using namespace std;

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

int N, M;
int R[NMAX], T[NMAX];

int search(int val) {
    int nod, aux;
    for(nod = val; nod != T[nod]; nod = T[nod]);
    for(; val != T[val]; ) {
        aux = T[val];
        T[val] = nod;
        val = aux;
    }
    return nod;
}

void unite(int a, int b) {
    if(R[a] < R[b])
        T[a] = b;
    else
    {
        if(R[a] == R[b]) ++ R[b];
        T[b] = a;
    }
}

void read() {
    int i, cod, a, b;
    fin >> N >> M;
    for(i = 1; i <= N; ++ i) {
        R[i] = 0;
        T[i] = i;
    }
    for(i = 1; i <= M; ++ i) {
        fin >> cod >> a >> b;
        if(cod == 2) {
            if(search(a) == search(b))
                fout << "DA\n";
            else fout << "NU\n";
        }
        else
            unite(a, b);
    }
}

int main() {
    read();
    return 0;
}