Cod sursa(job #300381)

Utilizator vladbBogolin Vlad vladb Data 7 aprilie 2009 13:30:29
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.94 kb
#include<stdio.h>

int t[100001],r[100001],n,m;

int fct(int n)
{   int x=n;
    while(t[x]!=x)
       x=t[x];
    while(t[n]!=n)
    {  int y=t[n];
       t[n]=x;
       n=y;
    }
    return x;
} 

int main()
{   freopen("disjoint.in","r",stdin);
    freopen("disjoint.out","w",stdout);
    int x,y,c,i;
    scanf("%d%d",&n,&m);
    for(i=1;i<=n;i++)
    {   t[i]=i;
        r[i]=1;
    }
    for(i=1;i<=m;i++)
    {   scanf("%d%d%d",&c,&x,&y);
        if(c==1)
        {   int tt,s;
            tt=fct(x);
            s=fct(y);
            if(t[tt]<t[s])
               t[tt]=s;
               else t[s]=tt;
              if(r[tt]==r[s]) 
                 r[tt]++;
        }
         else { int tt,s;
                tt=fct(x);
                s=fct(y);
                if(tt==s) printf("DA\n");
                  else printf("NU\n");
             }
    }
    fclose(stdin);
    fclose(stdout);
    return 0;
}