Cod sursa(job #675798)

Utilizator beldeabogdanBogdan Beldea beldeabogdan Data 8 februarie 2012 11:26:12
Problema Paduri de multimi disjuncte Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.66 kb
#include <cstdio>
#include <algorithm>
using namespace std;
int v[100005],n,j,i,m,x,y,caz,mn,mx,vmx,j2;
int main() {
	freopen("disjoint.in","r",stdin);
	freopen("disjoint.out","w",stdout);
	scanf("%d %d",&m,&n);
	for (i=1;i<=m;i++) v[i]=i;
	for (i=1;i<=n;i++) {
		scanf("%d",&caz);
		if (caz==1) {
			scanf("%d %d",&x,&y);
			mn=min(x,y);
			mx=x+y-mn;
			vmx=v[mx];
			j=mn;
			j2=mx;
			while (v[j]!=j) j=v[j];
			while (v[j2]!=j2) j2=v[j2];
			v[mx]=j;
		}
		else if (caz==2) {
			scanf("%d %d",&x,&y);
			while (v[x]!=x) x=v[x];
			while (v[y]!=y) y=v[y];
			if (v[x]==v[y]) printf("DA\n");
			else printf("NU\n");
		}
	}
	return 0;
}