Cod sursa(job #1052307)

Utilizator deea101Andreea deea101 Data 11 decembrie 2013 01:26:08
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.6 kb
#include <fstream>
#define nmax 100001
using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
int n, t[nmax], r[nmax];
void join(int x,int y)
{
	if(r[x]>r[y])
		t[y]=x;
	else 
		if(r[x]<r[y]) t[x]=y;
		else { t[x]=y; r[y]++; }
}
int tata(int x)
{
	while(x!=t[x])
		x=t[x];
	return x;
}
int main()
{
	f>>n;
	int i,q,a,x,y,t1,t2;
	for(i=1;i<=n;i++) t[i]=i;
	
	f>>q;
	while(q--)
	{
		f>>a; 
		f>>x>>y;
		if(a==1)
		{
			t1=tata(x);
			t2=tata(y);
			join(t1,t2);
		}
		else 
		{
			if(tata(x)==tata(y))
				g<<"DA\n";
			else g<<"NU\n";
		}
	}
}