Cod sursa(job #366370)

Utilizator AndreiDDiaconeasa Andrei AndreiD Data 21 noiembrie 2009 17:23:18
Problema Paduri de multimi disjuncte Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.79 kb
#include <cstdio>

#define file_in "disjoint.in"
#define file_out "disjoint.out"


#define Nmax 101001

int n,m,tata[Nmax],x,y,tip,niv[Nmax];

void unite(int t1, int t2)
{
   
	if (tata[t1]<tata[t2])
		niv[t1]+=t2,
		tata[t1]=t2;
	else
        niv[t2]+=t1,
		tata[t2]=t1;
}


inline int father(int t)
{
	if (t!=tata[t])
		t=tata[t];
	return tata[t];
}

int main()
{
	int i;
	freopen(file_in,"r",stdin);
	freopen(file_out,"w",stdout);
	
	scanf("%d %d", &n, &m);
	
	for (i=1;i<=n;++i) tata[i]=i,niv[i]=1;
	
	while(m--)
	{
		scanf("%d %d %d", &tip,&x, &y);
		
		if (tip==1)
		{
			unite(x,y);
		}
		else
		{
			if (father(x)==father(y))
				printf("DA\n");
			else
				printf("NU\n");
		}
	}
	
	
	fclose(stdin);
	fclose(stdout);
	
	return 0;
	
}