Cod sursa(job #508638)

Utilizator siminescuPaval Cristi Onisim siminescu Data 9 decembrie 2010 11:31:11
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.64 kb
#include<fstream>
# include<vector>
using namespace std;

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

# define nmax 100002
int n,m,tata[nmax],h[nmax];

void unire()
{
	int i,j;
	f>>i>>j;
	while(tata[i])
		i=tata[i];
	while(tata[j])
		j=tata[j];
	if(h[i]>h[j])
		tata[j]=i;
	else if(h[i]<h[j])
		tata[i]=j;
	else{ 
		tata[i]=j;
		h[i]++;
	}
	
}
void verificare()
{
	int i,j;
	f>>i>>j;
	while(tata[i])
		i=tata[i];
	while(tata[j])
		j=tata[j];
	if(i==j) g<<"DA\n";
	else g<<"NU\n";
}
int main()
{
	f>>n>>m;int x;
	for(;m;--m)
	{
		f>>x;
		if(x==1)
			unire();
		if(x==2)
			verificare();
	}
}