Cod sursa(job #1821797)

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

int fiu[NMax+1];

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;
}

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

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;
}