Cod sursa(job #228337)

Utilizator AndreiDDiaconeasa Andrei AndreiD Data 6 decembrie 2008 23:19:21
Problema Paduri de multimi disjuncte Scor 0
Compilator c Status done
Runda Arhiva educationala Marime 1.05 kb
#include <stdio.h>

#define MAX 100000

int N,M;
int cod,x,y;
int a,b,i;
int reu[MAX],mul[MAX];


int cauta(int x)
{
   if (x==mul[x])
        return x;
   else
   if (x!=mul[x])
       mul[x]=cauta(mul[x]);
   return mul[x];    
        
        
}

void reuneste(int x, int y)
{
   x=cauta(x);
   y=cauta(y);

   if (reu[x]<reu[y])
        mul[x]=y;
        else
        mul[y]=x;
             
 if (reu[x]==reu[y])
        reu[x]++;        
}           


int main()
{
    freopen("disjoint.in","r",stdin);
    freopen("disjoint.out","w",stdout);
    scanf("%d %d", &N,&M);
    for (i=1;i<=N;++i)
          {
                mul[i]=i;
          }
    while (M--)
    {
        scanf("%d %d %d", &cod,&x,&y);
        a=cauta(x);
        b=cauta(b);
        if (cod==1)
        {
           reuneste(x,y);
        }
        else
        if (cod==2)
        {
            if (a==b)
                printf("DA\n");
                else
                printf("NU\n");
        }
    }
return 0;
}