Cod sursa(job #871607)

Utilizator mihai27Mihai Popescu mihai27 Data 4 februarie 2013 22:18:35
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.54 kb
#include<fstream>

using namespace std;

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

int i,x,y,z,m,n,T[100001],R[100001];

int tata(int x)
{
	if (T[x]!=x) return tata(T[x]);
	return x;
}

void uneste(int x,int y)
{
	if (R[x]>R[y]) T[y]=x;
		else T[x]=y;
	if (R[x]==R[y]) R[y]++;
}

int main()
{
	in>>n>>m;
	
	for (i=1;i<=n;i++)
	{
		T[i]=i;
		R[i]=1;
	}
	
	for (i=1;i<=m;i++)
	{
		in>>x>>y>>z;
		if (x==1) uneste(tata(y),tata(z));
			else if(tata(y)==tata(z)) out<<"DA\n";
				else out<<"NU\n";
	}
}