Cod sursa(job #1607010)

Utilizator catalin9898Bajenaru Catalin catalin9898 Data 20 februarie 2016 19:19:38
Problema Paduri de multimi disjuncte Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
#include <iostream>
#include <stdio.h>

using namespace std;

int h[100001],tata[100001];
int gaseste(int x)
{int t=x,p;
    while(x!=tata[x])
    {
        x=tata[x];
    }
    while(t!=tata[t])
    {
        p=tata[t];
        tata[t]=x;
        t=p;
    }
    return x;
}

void uni(int x,int y)
{
    int a=gaseste(x),b=gaseste(y);
    if(h[a]<h[b])tata[x]=b;
    else
    {
        if(h[a]==h[b]){h[a]++;tata[y]=a;}
        else tata[y]=a;
    }

}


int main()
{freopen("disjoint.in","r",stdin );
freopen("disjoint.out","w",stdout);
int n,i,j,q,t,x,y,a,b;
   scanf("%d%d",&n,&t);
   for(i=1;i<=n;i++){h[i]=1;tata[i]=i;}
   for(j=0;j<t;j++)
   {
       scanf("%d%d%d",&q,&x,&y);
       if(q==1)
       uni(x,y);
       else
       {
           a=gaseste(x);
           b=gaseste(y);
           if(a==b)printf("DA\n");
           else printf("NU\n");
       }
   }

    return 0;
}