Cod sursa(job #673606)

Utilizator Eugen01Vasilescu Eugen Eugen01 Data 4 februarie 2012 18:05:47
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.7 kb
#include<stdio.h>
#define Nmax 100009

int x,y,type,n,t,i,T[Nmax],R[Nmax];

int tata(int x)
{
    if (x==T[x]) return x;
    return (tata(T[x]));
}

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

    scanf("%d%d",&n,&t);
    for (i=1;i<=n;i++)
    {
        T[i]=i;
        R[i]=1;
    }

    for (i=1;i<=t;i++)
    {
        scanf("%d%d%d",&type,&x,&y);
        if (type==1)
        {
            x=tata(x);
            y=tata(y);
            if (R[x]>R[y]) T[y]=x;
                else T[x]=y;
            if (R[x]==R[y]) R[y]++;
        }
        else if(tata(x)==tata(y)) printf("DA\n");
            else printf("NU\n");
    }
}