Cod sursa(job #794718)

Utilizator hasegandaniHasegan Daniel hasegandani Data 6 octombrie 2012 21:30:10
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 kb
#include <cstdio>

const int Nmax = 100010;

int N;
int sets[Nmax];

void unite(int a,int b)
{
	int heada = a,headb=b;
	int aux;
	for( ; sets[heada] ; heada = sets[heada]);
	while ( sets[headb] )
	{
		aux = sets[headb];
		sets[headb] = heada;
		headb = aux;
	}
	sets[headb] = heada;
}

int disjoint(int a,int b)
{
	int heada,headb;
	for(heada = a; sets[heada] ; heada = sets[heada]);
	for(headb = b; sets[headb] ; headb = sets[headb]);
	return (heada != headb);
}

int main()
{
	int op,M,a,b;

	freopen("disjoint.in","r",stdin);
	freopen("disjoint.out","w",stdout);
	
	scanf("%d",&N);
	scanf("%d",&M);

	for( ; M ; --M)
	{
		scanf("%d",&op);
		scanf("%d",&a);
		scanf("%d",&b);
		switch(op)
		{
			case 1: unite(a,b); break;
			case 2: printf("%s\n", ( (disjoint(a,b))?"NU":"DA") ); break;
		}
	}

	return 0;
}