Cod sursa(job #803138)

Utilizator BarracudaFMI-Alex Dobrin Barracuda Data 27 octombrie 2012 09:27:04
Problema Paduri de multimi disjuncte Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.61 kb
#include<fstream>
#define dim 100006
using namespace std;


ifstream f("disjoint.in");
ofstream g("disjoint.out");
int T[dim],i,j,x,y,a,b;
int tata(int x){
	int y=x;
	while(T[y]>=0)
		y=T[y];
	return y;
}
void unire(int a,int b){
	if(-T[a]>=T[b]){
		T[a]=T[a]+T[b];
		T[b]=a;
	}
	else{
		T[b]=T[b]+T[a];
		T[a]=b;
		
	}
	
}
int main () {
	
	
	
	f>>n>>m;
	for(i=1;i<=n;++i)
		T[i]=-1;
	for(i=1;i<=m;++i){
		
		f>>op>>x>>y;
		a=tata(x);b=tata(y);
		if(op==1){
			
			unire(a,b);
			
		}
		else{
			if(a!=b)
				g<<"NU\n";
			else
				g<<"DA\n";
			
		}
		
		
	}
	
	return 0;
}