Cod sursa(job #881097)

Utilizator Claudiu95Vartolomei Alexandru Claudiu Claudiu95 Data 17 februarie 2013 18:28:06
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.66 kb
#include<cstdio>
using namespace std;
int t[100100],nr[100100],n,m,x1,x2,x3;
int solve(int e1){
	int s;
	for(s=t[e1];s!=t[s];s=t[s]);
	return s;
}
void update(int e1,int e2){
	if(nr[e1]<nr[e2]){
		t[e1]=e2;
	}
	else
		if(nr[e1]==nr[e2]){
			++nr[e1];
			t[e2]=e1;
		}
		else
			t[e2]=e1;
}
int main(){
	freopen("disjoint.in","r",stdin);
	freopen("disjoint.out","w",stdout);
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;++i){
		t[i]=i;
		nr[i]=1;
	}
	for(int i=1;i<=m;++i){
		scanf("%d%d%d",&x1,&x2,&x3);
		if(x1==1)
			update(solve(x2),solve(x3));
		else
			if(solve(x2)==solve(x3))
				printf("DA\n");
			else
				printf("NU\n");
	}
	return 0;
}