Cod sursa(job #1719997)

Utilizator CodrutLemeniCodrut Lemeni CodrutLemeni Data 20 iunie 2016 21:24:37
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.04 kb
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 100010

using namespace std;

int tata[N];

int findtat(int x){

    while(tata[x]>0){
        x=tata[x];
    }
    return x;

}

int main(){
    int n,m;
    int p,x,y,tatx,taty,t;

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

    scanf("%d%d",&n,&m);

    memset(tata,-1,(n+1)*sizeof(int) );

    for(;m;m--){
        scanf("%d%d%d",&p,&x,&y);
        if(p==1){
            tatx=findtat(x);
            taty=findtat(y);
            if( -tata[tatx] > -tata[taty] ){
                t=taty;
                taty=tatx;
                tatx=t;

                t=y;
                y=x;
                x=t;
            }
            tata[taty]+=tata[tatx];
            tata[tatx]=taty;


        }else{
            if( findtat(x)==findtat(y) ){
                printf("DA\n");
                continue;
            }
            printf("NU\n");
        }


    }


    return 0;
}