Cod sursa(job #407464)

Utilizator hasegandaniHasegan Daniel hasegandani Data 2 martie 2010 12:57:44
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.73 kb
#include<stdio.h>

#define Nmax 100005

int arb[Nmax],N;

void unite(int a,int b)
{
    int c=a,d;
    for( ; arb[a] ; a=arb[a]);
    while( arb[c] )
        {
        d=arb[c];
        arb[c]=b;
        c=d;
        }
    arb[a]=b;
}

int find(int a)
{
    for(;arb[a];a=arb[a]);
    return a;
}

int main()
{
    int M,a,b,x;
    freopen("disjoint.in","r",stdin);
    freopen("disjoint.out","w",stdout);
    scanf("%d%d",&N,&M);
    for(int i=1;i<=M;++i)
        {
        scanf("%d%d%d",&x,&a,&b);
        if (x==1)
            unite(a,b);
        if (x==2)
            if (find(a)==find(b))
                printf("DA\n");
            else
                printf("NU\n");
        }
    return 0;
}