Cod sursa(job #905717)

Utilizator Claudiu95Vartolomei Alexandru Claudiu Claudiu95 Data 6 martie 2013 08:47:26
Problema Paduri de multimi disjuncte Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
#include<iostream> 
#include<fstream> 
using namespace std; 
ifstream f("disjoint.in"); 
ofstream g("disjoint.out"); 
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(){    
	f>>n>>m;    
	for(int i=1;i<=n;++i){ 
        t[i]=i;      
		nr[i]=1;    
		}   
	for(int i=1;i<=m;++i){ 
        f>>op>>e1>>e2;    
		if(op==1){       
			update(solve(e1),solve(e2));   
			}       
		else{             
			if(solve(e1)==solve(e2)){      
				g<<"DA"<<endl;      
				}              
			else            
				g<<"NU"<<endl;    
			}     
	}     
	return 0; 
}