Cod sursa(job #3274141)

Utilizator CosminaneBoac Mihai Cosmin Cosminane Data 5 februarie 2025 15:09:06
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.75 kb
#include <fstream>
using namespace std;
int rad[100005];
int find(int x){
	if( rad[x] < 0 ){
		return x;
	}
	rad[x] = find( rad[x] );
	return rad[x];
}
void unite(int x, int y){
	if( rad[x] > rad[y] ){
		swap( x, y );
	}
	rad[x] += rad[y];
	rad[y] = x;
}
int main(){
	int n, m, i, tip, x, y, rad_x, rad_y;
	ifstream fin( "disjoint.in" );
	ofstream fout( "disjoint.out" );
	fin >> n >> m;
	for( i = 1; i <= n; i++ ){
		rad[i] = -1;
	}
	for( i = 0; i < m; i++ ){
		fin >> tip >> x >> y;
		if( tip == 1 ){
			rad_x = find( x );
			rad_y = find( y );
			if( rad_x != rad_y ){
				unite( rad_x, rad_y );
			}
		}
		else{
			if( find(x) == find(y) ){
				fout << "DA\n";
			}
			else{
				fout << "NU\n";
			}
		}
	}
	return 0;
}