Cod sursa(job #614712)

Utilizator maritimCristian Lambru maritim Data 7 octombrie 2011 15:34:59
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.79 kb
#include<stdio.h>

#define MaxN 100100

int N,M,stare,x,y,T[MaxN],rang[MaxN];

int radacina(int n)
{
	if(T[n] != n)
		T[n] = radacina(T[n]);
	return T[n];
}

void reuneste(int x,int y)
{
	x = radacina(x);
	y = radacina(y);
	if(rang[x] > rang[y])
		T[y] = x,rang[y] ++;
	else
		T[x] = y,rang[x] ++;
}

void Complet(void)
{
	for(int i=1;i<MaxN;i++)
		T[i] = i;
}

int main()
{
	FILE *f = fopen("disjoint.in","r");
	FILE *g = fopen("disjoint.out","w");
	
	Complet();
	fscanf(f,"%d %d",&N,&M);
	for(int i=1;i<=M;i++)
	{
		fscanf(f,"%d %d %d",&stare,&x,&y);
		switch(stare)
		{
			case 1 : reuneste(x,y);
				break;
			case 2 : if(radacina(x) == radacina(y))
						fprintf(g,"DA\n");
					else
						fprintf(g,"NU\n");
		}
	}
	
	fclose(g);
	fclose(f);
	return 0;
}