Cod sursa(job #2919869)

Utilizator alt_contStefan alt_cont Data 20 august 2022 13:54:54
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.66 kb
#include <fstream>
#include <iostream>

#define MAX 100002
using namespace std;


int up[MAX];
int d[MAX];

int find(int n){
	if(up[n] == n)
		return up[n];
	else{
		up[n] = find(up[n]);
		return up[n];
	}
}

void join(int a, int b){
	a = up[a];
	b = up[b];
	if(d[a] < d[b])
		swap(a, b);
	if(d[a] == d[b])
		++d[a];

	up[b] = a;
}


int main(){
	ifstream fin("disjoint.in");
	ofstream fout("disjoint.out");
	int n, m, a, b, q;
	fin >> n >> m;
	for(int i = 0; i <= n; ++i)
		up[i] = i;

	for(int i = 0; i < m; ++i){
		fin >> q >> a >> b;
		if(q == 1)
			join(a, b);
		else
			fout << (find(a) == find(b) ? "DA" : "NU") << "\n";
	}

}