Cod sursa(job #2144626)

Utilizator mirupetPetcan Miruna mirupet Data 26 februarie 2018 20:42:10
Problema Paduri de multimi disjuncte Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
#include<cstdio>
using namespace std;

FILE *fin = freopen("disjoint.in", "r", stdin);
FILE *fout = freopen("disjoint.out", "w", stdout);

const int NMax = 100001;
int T, X, Y, M, N;
int lg[NMax], father[NMax];

int Find (int x){

    while (x != father[x])
        x = father[x];

    return x;
}

void Union(int x, int y){

    if (lg[y] < lg[x])
        father[y] = x;
    else
        father[x] = y;

    /*if (lg[x] == lg[y])
        lg[y] ++;*/
}

int main(){

    scanf("%d%d", &N, &M);

    for (int i = 1; i <= N; i++){

        father[i] = i;
        lg[i] = 1;
    }

    for (int i = 1; i <= M; i++){

        scanf("%d%d%d", &T, &X, &Y);

        if (T == 1)
            Union(Find(X), Find(Y));
        else{

            if (Find(X) == Find(Y))
                printf("DA\n");
            else
                printf("NU\n");
        }

    }
}