Cod sursa(job #2443499)

Utilizator KRAKEN01Sergiu Adrian KRAKEN01 Data 28 iulie 2019 13:27:36
Problema Paduri de multimi disjuncte Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.89 kb
//#include <fstream>
#include <iostream>
using namespace std;

//ifstream cin("disjoint.in");
//ofstream cout("disjoint.out");

int dad[100005];
int card[100005];

int stramos(int nod) {
	if (nod != dad[nod]) {
		dad[nod] = stramos(dad[nod]);
	}
	return dad[nod];
}

void unite(int a, int b) {
	if (card[dad[a]] > card[dad[b]]) {
		int old1 = card[dad[b]];
		dad[b] = dad[a];
		card[dad[a]] += old1;
	}
	else {
		int old2 = card[dad[a]];
		dad[a] = dad[b];
		card[dad[b]] += old2;
	}
}



int main()
{
	int n, m;
	cin >> n >> m;
	for (int i = 1; i <= n; i++) {
		dad[i] = i;
		card[i] = 1;
	}
	for (int i = 1; i <= m; i++) {
		int x, a, b;
		cin >> x >> a >> b;
		if (x == 1) {
			unite(stramos(a), stramos(b));
		}
		if (x == 2) {
			if (stramos(a) == stramos(b)) {
				cout << "DA" << '\n';
			}
			else {
				cout << "NU" << '\n';
			}
		}
	}
	return 0;
}