Cod sursa(job #1183611)

Utilizator toncuvasileToncu Vasile toncuvasile Data 9 mai 2014 21:03:56
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.62 kb
//Paduri De Multimi Disjuncte
#include <fstream>
using namespace std;

int n, m;
int T[100001], H[100001];

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

int GetRoot(int x)
{
	while(T[x]){ x=T[x]; }
	return x;
}

int main()
{
	inFile >> n >> m;

	int q, x, y, rx, ry;
	for(int i=1; i<=m; i++){
		inFile >> q >> x >> y;
		rx=GetRoot(x);
		ry=GetRoot(y);
		if(q==1 && rx!=ry){
			if( H[rx]>H[ry] ){ T[ry]=rx; }
			if( H[rx]<H[ry] ){ T[rx]=ry; }
		    if( H[rx]==H[ry] ){ T[ry]=rx; H[rx]++; }
		}
		if(q==2){
			if(rx==ry) outFile << "DA\n";
			else outFile << "NU\n";
		}
	}
}