Cod sursa(job #1196786)

Utilizator tudi98Cozma Tudor tudi98 Data 9 iunie 2014 01:00:23
Problema Paduri de multimi disjuncte Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.6 kb
#include <fstream>
#define dim 100005

int P[dim],rank[dim],n,k,m,t,x,y,i;

void CREATE_SETS(int n){
	for(i=1;i<=n;i++){
		rank[i]=1;
		P[i]=i;		
	}
}

int FIND_SET(int x){
	if(P[x]!=x) P[x]=FIND_SET(P[x]);
	return P[x];
}

void MERGE_SETS(int x,int y){
	if(rank[x]>rank[y])
		P[y]=x;
	else P[x]=P[y];
	if(rank[x]==rank[y]) rank[y]++;
}

int main(){

	std::ifstream f("disjoint.in");
	std::ofstream g("disjoint.out");

	f >> n >> m;
	CREATE_SETS(n);

	for(k=1;k<=m;k++){
		f >> t >> x >> y;
		if(t==1){
			MERGE_SETS(x,y);
		}
		else{
			if(FIND_SET(x)==FIND_SET(y)) g << "DA\n";
			else g << "NU\n";
		}
	}
}