Cod sursa(job #907657)

Utilizator deresurobertoFMI - Deresu Roberto deresuroberto Data 8 martie 2013 10:27:29
Problema Paduri de multimi disjuncte Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.11 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; 
    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; 
}