Cod sursa(job #3274137)

Utilizator CosminaneBoac Mihai Cosmin Cosminane Data 5 februarie 2025 14:57:14
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.78 kb
#include <fstream>
using namespace std;
int card[100005], rad[100005];
int find(int x){
	if( rad[x] == x ){
		return x;
	}
	rad[x] = find( rad[x] );
	return rad[x];
}
void unite(int x, int y){
	if( card[x] < card[y] ){
		swap( x, y );
	}
	rad[y] = x;
	card[x] += card[y];
}
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++ ){
		card[i] = 1;
		rad[i] = i;
	}
	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;
}