Cod sursa(job #674845)

Utilizator BarracudaFMI-Alex Dobrin Barracuda Data 6 februarie 2012 20:02:45
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.59 kb
#include<fstream>
#define lim 100002
using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
int T[lim],m,n,i,tip,x,y,a,b;
int tata (int x){
	int y=x;
	while(T[y]>=0){
		y=T[y];
	}
	return y;
}
void lipeste(int a,int b){
	if(-T[a]>=-T[b]){
		T[a]=T[a]+T[b];
		T[b]=a;
	}
	else{
		T[b]=T[a]+T[b];
		T[a]=b;
	}
	
}
int main(){
	f>>n>>m;
	for(i=1;i<=n;i++){
		T[i]=-1;
	}
	for(i=1;i<=m;i++){
		f>>tip>>x>>y;
		a=tata(x);
		b=tata(y);
		if(tip==1){
			lipeste(a,b);
		}
		else{
			if(a==b)
				g<<"DA\n";
			else
				g<<"NU\n";
		}
	}
	return 0;
}