Cod sursa(job #739134)

Utilizator vlad.doruIon Vlad-Doru vlad.doru Data 22 aprilie 2012 11:44:38
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.68 kb
#include <fstream>

using namespace std;

ifstream in("disjoint.in");
ofstream out("disjoint.out");

const int N=110000;

int n,m;
int v[N];

int getroot(int x){
	int radx,ant,cx;
	while(v[x]!=x){
		x=v[x];
	}
	radx=x;
	ant=cx;
	x=cx;
	while(v[x]!=x){
		x=v[x];
		v[ant]=radx;
		ant=x;
	}
	return radx;
}

void query(int x,int y){
	if(getroot(x)==getroot(y)){
		out<<"DA\n";
		return;
	}
	out<<"NU\n";
}		

void join(int x,int y){
	v[getroot(x)]=getroot(y);
}

int main(){
	in>>n>>m;
	for(int i=1;i<=n;++i){v[i]=i;}
	while(m--){
		int x,y;
		in>>x;
		if(x==1){
			in>>x>>y;join(x,y);
			continue;
		}
		in>>x>>y;query(x,y);
	}		
	return 0;
}