Cod sursa(job #1385148)

Utilizator razboi4Manole Iulian razboi4 Data 11 martie 2015 18:38:10
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.94 kb
#include<bits/stdc++.h>
using namespace std;
int Tata[100005], Rang[100005];
void Reuneste(int X, int Y)
{
    if(Rang[X] > Rang[Y])
        Tata[Y] = X;
    if(Rang[X] < Rang[Y])
        Tata[X] = Y;
    if(Rang[X] == Rang[Y]) {
        Tata[Y] = X;
        Rang[X] ++;
    }
}
int Find(int Nod)
{
    if(Tata[Nod] == Nod)
        return Nod;
    return (Tata[Nod] = Find(Tata[Nod]));
}
int main()
{
    int N, M;
    freopen("disjoint.in", "r", stdin);
    freopen("disjoint.out", "w", stdout);
    scanf("%d%d", &N, &M);
    for(int i = 1; i <= N; ++ i) {
        Tata[i] = i;
        Rang[i] = 1;
    }
    for( ; M ; -- M) {
        int Cod, X, Y;
        scanf("%d %d %d", &Cod, &X, &Y);
        if(Cod == 1)
            Reuneste(Find(X), Find(Y));
        else {
            if(Find(X) == Find(Y))
                printf("DA\n");
            else
                printf("NU\n");
        }
    }
    return 0;
}