Cod sursa(job #532092)

Utilizator ucc_5Usurelu Catalin ucc_5 Data 10 februarie 2011 20:20:53
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.8 kb
#include <fstream>
#define nmax 100002
using namespace std;

ifstream f("disjoint.in");
ofstream g("disjoint.out");

int tata[nmax],h[nmax];

int find (int x)
{
	int r=x,aux,t;
	while (tata[r]) r=tata[r];
	aux=x;
	while (aux!=r)  //avem mai multi auxiliari t,aux
	{
		t=tata[aux];
		tata[aux]=r;
		aux=t;
	}
	return r;
}

void unite (int x,int y)
{
	if (h[x]>h[y])
		tata[y]=x;
	else tata[x]=y;
	if (h[x]==h[y]) h[y]++; //fiind egale tata[x]=y;
}

int main ()
{
	int n,t,cod,x,y;
	f>>n>>t;
	for (int i=1; i<=n; i++)
		h[i]=1; //inaltimea multimii cu tatal in i
		
	for (int i=1; i<=t; i++)
	{
		f>>cod>>x>>y;
		if (cod==1)
			unite(find(x),find(y));
		else 
			if (find(x)==find(y))
				g<<"DA"<<'\n';
			else g<<"NU"<<'\n';
	}
	f.close (); g.close ();
	return 0;
}