Cod sursa(job #2274053)

Utilizator Dobricean_IoanDobricean Ionut Dobricean_Ioan Data 1 noiembrie 2018 11:38:33
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.66 kb
#include <fstream>

using namespace std;

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

const int Dim = 1e5 + 5;

int T[Dim],H[Dim],n,m;
int Find(int x) ;
void Union(int i,int j);

int main() {
	
	fin >> n >> m;
	for ( int i = 1; i <= n; ++i)
		T[i] = i;
	int type,x,y;
	for ( ; m > 0; --m) {
		fin >> type >> x >> y;
		if ( type == 1)
			{Union(Find(x),Find(y));}
		else
			if ( Find(x) != Find(y) )
				fout << "NU\n";
		else
			fout << "DA\n";
		
	}
	
}

void Union(int i,int j) {
	
	if ( H[i] > H[j])
		T[j] = i;
	else
		{ T[i] = j;
		if ( H[i] == H[j])
			++H[j];
		}
}

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