Cod sursa(job #1441982)

Utilizator buzu.tudor67Tudor Buzu buzu.tudor67 Data 24 mai 2015 14:02:47
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.66 kb
#include<fstream>
using namespace std;
ifstream fi("disjoint.in");
ofstream fo("disjoint.out");

const int MAX_N = 100005;

int tata[MAX_N],rang[MAX_N];
int i,oper,x,y,n,m;

int radacina(int x){
	while(tata[x]!=x) x=tata[x];
	return x;
}

void uneste(int x, int y){
	 if(rang[x]>rang[y]) tata[y]=x;
	 else tata[x]=y;
	 if(rang[x]==rang[y]) rang[y]++;
}

int main(){
	fi>>n>>m;
	for(i=1;i<=n;i++){
		tata[i]=i;
		rang[i]=0;
	}
	
	for(i=1;i<=m;i++){
		fi>>oper>>x>>y;
		if(oper==1) uneste(radacina(x),radacina(y));
		else{
			if(radacina(x)==radacina(y)) fo<<"DA\n";
			else fo<<"NU\n";
		}
	}
	
	fi.close();
	fo.close();
	return 0;
}