Cod sursa(job #359858)

Utilizator xtremespeedzeal xtreme Data 28 octombrie 2009 15:51:31
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.8 kb
#include <stdio.h>
#define nmax 100010

int N,M,TT[nmax];

int root(int num)
    {int R,j,x,r;
     for(R=TT[num];R!=TT[R];R=TT[R]);
     for(;num!=TT[num];)
              {j=TT[num];TT[num]=R;num=j;}
     return R;
     }
void unite(int R1,int R2)
     {TT[R2]=R1;
     }
int main()
    {freopen("disjoint.in","r",stdin);
     freopen("disjoint.out","w",stdout);
     int i,tip,x,y;
     scanf("%d %d",&N,&M);
     for(i=1;i<=N;i++)    TT[i]=i;
     for(i=1;i<=M;i++)
           {scanf("%d %d %d",&tip,&x,&y);
            if(tip==2)    
                     {if(root(x)==root(y)) printf("DA\n");
                      else                 printf("NU\n");
                     }
            else      unite(root(x),root(y));
            }
     fclose(stdin);fclose(stdout);return 0;
     }