Cod sursa(job #2457089)

Utilizator TheGodFather2131Alexandru Miclea TheGodFather2131 Data 16 septembrie 2019 17:03:52
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.22 kb
//ALEXANDRU MICLEA

#include <vector>
#include <algorithm>
#include <string>
#include <queue>
#include <map>
#include <set>
#include <unordered_map>
#include <time.h>
#include <iomanip>
#include <deque>
#include <math.h>
#include <cmath>
#include <assert.h>
#include <stack>
#include <bitset>
#include <random>
#include <chrono>

using namespace std;

#include <fstream>
ifstream cin("disjoint.in"); ofstream cout("disjoint.out");

int tata[100005];
int nrelem[100005];
int c, m, n, x, y;

int strabunic(int nod) {
	if (nod != tata[nod]) {
		tata[nod] = strabunic(tata[nod]);
	}
	return tata[nod];
}

void merge(int a, int b) {
	if (nrelem[tata[a]] > nrelem[tata[b]]) {
		int cop = nrelem[tata[b]];
		tata[a] = tata[b];
		nrelem[tata[a]] += cop;
	}
	else {
		int cop = nrelem[tata[a]];
		tata[b] = tata[a];
		nrelem[tata[b]] += cop;
	}
}

int main() {

	cin >> m >> n;

	for (int i = 1; i <= m; i++) {
		tata[i] = i;
		nrelem[i] = i;
	}

	for (int i = 1; i <= n; i++) {
		cin >> c >> x >> y;

		if (c == 1) {
			merge(strabunic(x), strabunic(y));
		}
		if (c == 2) {
			if (strabunic(x) == strabunic(y)) {
				cout << "DA\n";
			}
			else {
				cout << "NU\n";
			}
		}
	}
}