Cod sursa(job #922530)

Utilizator caliuxSegarceanu Calin caliux Data 22 martie 2013 12:23:07
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.81 kb
#include <stdio.h>
using namespace std;

int N, M, vec[100002];
int i, j, op, x, y, r1, r2;

int root(int x){
    if(vec[x] == x){
        return x;
    }else{
        int r = root(vec[x]);
        vec[x] = r;
        return r;
    }
}

int main(){
    freopen("disjoint.in", "r", stdin);
    freopen("disjoint.out", "w", stdout);

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

    for(i = 1; i <= N; i++){
        vec[i] = i;
    }

    for(i = 1; i <= M; i++){
        scanf("%d%d%d", &op, &x, &y);
        if(op == 1){
            r1 = root(x);
            r2 = root(y);
            vec[r1] = r2;
        }else{
            r1 = root(x);
            r2 = root(y);
            if(r1 == r2){
                printf("DA\n");
            }else{
                printf("NU\n");
            }
        }
    }
}