Cod sursa(job #228338)

Utilizator AndreiDDiaconeasa Andrei AndreiD Data 6 decembrie 2008 23:22:51
Problema Paduri de multimi disjuncte Scor 10
Compilator c Status done
Runda Arhiva educationala Marime 1.19 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)   
{   
    if (reu[x]==reu[y])
        reu[x]++;
   if (reu[x]<reu[y])   
        mul[x]=y;   
        else  
        mul[y]=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; 
                reu[i]=1;  
          }   
    while (M--)   
    {   
        scanf("%d %d %d", &cod,&x,&y);   
        a=cauta(x);   
        b=cauta(y);   
        if (cod==1)   
        {   
           reuneste(x,y);   
        }   
        else  
        if (cod==2)   
        {   
            if (a==b)   
                printf("DA\n");   
                else  
                printf("NU\n");   
        }   
    }   
return 0;   
}