Cod sursa(job #907660)

Utilizator deresurobertoFMI - Deresu Roberto deresuroberto Data 8 martie 2013 10:32:36
Problema Paduri de multimi disjuncte Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.14 kb
#include<cstdio> 
long int tata[100005],n,m,x,y,t,i,tip,t1,t2; 
  
void re() 
{ 
    t=x; 
    while(t!=tata[t])t=tata[t]; 
    t1=t; 
    t=y; 
    while(t!=tata[t])t=tata[t]; 
    t2=t; 
    if(t1>t2){ 
        t=y; 
        while(t!=tata[t]){ 
            t2=t; 
            t=tata[t]; 
            tata[t2]=t1; 
        } 
        tata[t]=t1; 
    } 
    else{ 
        t=x; 
        while(t!=tata[t]){ 
            t1=t; 
            t=tata[t]; 
            tata[t1]=t2; 
        } 
        tata[t]=t2; 
    } 
} 
  
void ver()
{
	t=x; 
    while(t!=tata[t])t=tata[t];
    t1=t;
	if(t1==tata[y])printf("DA\n");
	else{
    t=y;
    while(t!=tata[t])t=tata[t];
    t2=t;
	if(t1==t2)printf("DA\n");
		 else printf("NU\n");
	}
}
  
int main() 
{ 
    freopen("disjoint.in","r",stdin); 
    freopen("disjoint.out","w",stdout); 
    scanf("%ld %ld",&n,&m); 
    for(i=1;i<=n;i++)tata[i]=i; 
      
    for(i=1;i<=m;i++){ 
        scanf("%ld %ld %ld",&tip,&x,&y); 
        if(tip==1)re();
        else
        if(tip==2){
           if(x==y)printf("DA\n");
             else ver();
		}
    }
    return 0;
}