Cod sursa(job #475639)

Utilizator robigiirimias robert robigi Data 7 august 2010 19:54:08
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.87 kb
// Paduri de multimi disjuncte.cpp : Defines the entry point for the console application.
//

//#include "stdafx.h"
#include "stdio.h"

FILE *f=fopen("disjoint.in", "r");
FILE *g=fopen("disjoint.out", "w");

int n, m, tt[100001], rg[100001];


int find(int x)
{
	int i;
	for (i=x; tt[i]!=i; i=tt[i]);

	while (tt[x]!=x)
	{
		int y=tt[x];
		tt[x]=i;
		x=y;
	}
	return i;
}


void unite(int x, int y)
{
	if (rg[x]>rg[y])
		tt[y]=x;
	else
		tt[x]=y;
	if (rg[x]==rg[y])
		rg[y]++;

}



int main()
{
	fscanf(f, "%d%d", &n, &m);
	for (int i=1; i<=n; ++i)
	{
		tt[i]=i;
		rg[i]=1;
	}

	for (int j=1; j<=m; ++j)
	{
		int cod, x, y;
		fscanf(f, "%d%d%d", &cod, &x, &y);

		if (cod==2)
		{
			if (find(x)==find(y))
				fprintf(g, "DA\n");
			else fprintf(g, "NU\n");
		}
		else
		{
			unite(find(x), find(y));
		}
	}

	return 0;
}