Cod sursa(job #2182542)

Utilizator Dobricean_IoanDobricean Ionut Dobricean_Ioan Data 22 martie 2018 14:17:58
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.68 kb

#include <fstream>
using namespace std;

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

const int Dim =  100001;
int T[Dim],H[Dim],m,n;

void Union(int r1, int r2);
int Find(int x);

int main() {
	
	fin >> n >> m;
	int task,x,y;
	for ( int i = 1; i <= n; ++i)
		T[i] = i;
	for ( int i = 1; i <= m; ++i)  	{
			fin >> task >> x >> y;
			if ( task == 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[r1] = r2;
	else {
			 T[r2] = r1;
			 if (H[r1] == H[r2] )
				++H[r1];
			}		
	
}