Cod sursa(job #1646323)

Utilizator VladTiberiuMihailescu Vlad Tiberiu VladTiberiu Data 10 martie 2016 15:46:28
Problema Paduri de multimi disjuncte Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.01 kb
#include <cstdio>
#include <vector>
#include <queue>
#include <set>
#include <stack>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <iomanip>

#define NMax 100005
#define mod 1999999973
#define INF 0x3f3f3f3f
using namespace std;
int n,m,p,x,y,vf1,vf2;
int rang[NMax],rad[NMax];

int root(int k){
    while(rad[k])
        k = rad[k];
    return k;
}
int main()
{
    freopen("cautbin.in","r",stdin);
    freopen("cautbin.out","w",stdout);
    scanf("%d%d",&n,&m);
    for(int i = 1; i <= m; ++i){
        scanf("%d%d%d",&p,&x,&y);
        vf1 = root(x);
        vf2 = root(y);

        if(p == 1){
            if(rang[vf1] > rang[vf2]){
                rang[vf1] += rang[vf2];
                rad[vf2] = vf1;
            }else{
                rang[vf2] += rang[vf1];
                rad[vf1] = vf2;
            }
        }else{
            if(vf1 == vf2)
                printf("DA\n");
            else
                printf("NU\n");
        }
    }
    return 0;
}