Cod sursa(job #905729)

Utilizator Claudiu95Vartolomei Alexandru Claudiu Claudiu95 Data 6 martie 2013 08:52:42
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb
#include<iostream> 
#include<cstdio>
using namespace std; 
int t[100100],nr[100100],n,m,op,e1,e2;  
int solve(int e1){    
	int aux,s;   
	for(s=t[e1];s!=t[s];s=t[s]);  
	for(;t[e1]!=e1;){
		aux=t[e1];
		t[e1]=s;
		e1=aux;
	}
	return s; 
	
} void update(int e1,int e2){ 
    if(nr[e1]<nr[e2]){     
		t[e1]=e2;    
		}    
	else       
		if(nr[e1]==nr[e2]){   
			++nr[e1];        
			t[e2]=e1;      
			}       
		else          
			t[e2]=e1; 
}
int main(){    
	freopen("disjoint.in","r",stdin);
	freopen("disjoint.out","w",stdout);
	
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;++i){ 
        t[i]=i;      
		nr[i]=1;    
		}   
	for(int i=1;i<=m;++i){ 
        scanf("%d%d%d",&op,&e1,&e2);     
		if(op==1){       
			update(solve(e1),solve(e2));   
			}       
		else{             
			if(solve(e1)==solve(e2)){      
				printf("DA\n");      
				}              
			else            
				printf("NU\n");    
			}     
	}     
	return 0; 
}