Cod sursa(job #1821790)

Utilizator silkMarin Dragos silk Data 3 decembrie 2016 17:18:34
Problema Paduri de multimi disjuncte Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.75 kb
#include <cstdio>
#define NMax 100000

int fiu[NMax+1];

inline void Union(int x, int y)
{
    fiu[x] = y;
}

inline int Find(int x)
{
    int v,rad=x;

    while( fiu[rad] ) rad = fiu[rad];
    while( fiu[x] )
    {
        v = fiu[x];
        fiu[x] = rad;
        x = v;
    }
    return rad;
}

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

    int i,N,M,t,x,y,a,b;

    scanf("%d %d",&N,&M);
    for(i = 1; i <= M; ++i)
    {
        scanf("%d %d %d",&t,&x,&y);
        if( t==1 ) Union(x,y);
        else
        {
            a = Find(x);
            b = Find(y);
            if( a ^ b ) printf("NU\n");
            else printf("DA\n");
        }
    }


return 0;
}