Cod sursa(job #1716972)

Utilizator oldatlantianSerban Cercelescu oldatlantian Data 14 iunie 2016 00:54:11
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.93 kb
#include <bits/stdc++.h>
using namespace std;

const int NMAX = 100005;

int far[NMAX], rang[NMAX];

inline void update(int a, int b) {
    while(far[a]) a = far[a];
    while(far[b]) b = far[b];

    if(rang[a]>=rang[b])
        far[b] = a;
    else
        far[a] = b;
}

inline void query(int a, int b) {
    while(far[a]) a = far[a];
    while(far[b]) b = far[b];

    if(a==b)
        puts("DA");
    else
        puts("NU");
}

int main(void) {
    freopen("disjoint.in", "r", stdin);
    freopen("disjoint.out", "w", stdout);
    int n, m, tsk, a, b;


    scanf("%d%d",&n,&m);
    for(int i=0; i<n; ++i)
        rang[i] = 1;
    while(m--) {
        scanf("%d%d%d",&tsk,&a,&b);
        switch(tsk) {
        case 1:
            update(a, b);
            break;
        case 2:
            query(a, b);
            break;
        }
    }

    fclose(stdin);
    fclose(stdout);
    return 0;
}