Cod sursa(job #2172020)

Utilizator Dobricean_IoanDobricean Ionut Dobricean_Ioan Data 15 martie 2018 14:36:40
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.67 kb
#include <fstream>
using namespace std;
ifstream fin ( "disjoint.in" );
ofstream fout ("disjoint.out" );
const int Dim = 100001;
int n,m,T[Dim],H[Dim];
int Find(int x);
void Union(int r1, int r2);

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

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

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