Cod sursa(job #335621)

Utilizator bent_larsenSturzu Antonio-Gabriel bent_larsen Data 30 iulie 2009 18:14:05
Problema Paduri de multimi disjuncte Scor 0
Compilator c Status done
Runda Arhiva educationala Marime 0.72 kb
#include<stdio.h>

int rang[100000],p[100000];

void unite(int x,int y)
{
	if(rang[x]>rang[y])
		p[y]=x;
	else
	{
		p[x]=y;
		if(rang[x]==rang[y])
			rang[y]++;
	}
}

int find(int x)
{
	if(x!=p[x])
		p[x]=find(p[x]);
	return p[x];
}


void reunion(int x,int y)
{
	unite(find(x),find(y));
}

int main()
{
	int n,m,x,y,i,tip;
	FILE *f=fopen("disjoint.in","r");
	FILE *g=fopen("disjoint.out","w");

	fscanf(f,"%i%i\n",&n,&m);
	for(i=0;i<m;i++)
	{
		fscanf(f,"%i%i%i\n",&tip,&x,&y);
		if(tip==1)
			reunion(x,y);
		else
		{
			if(find(x)==find(y))
				fprintf(g,"%s\n","DA");
			else
				fprintf(g,"%s\n","NU");
		}
	}
	fclose(f);
	fclose(g);
	return 0;
}