Cod sursa(job #1711433)

Utilizator retrogradLucian Bicsi retrograd Data 31 mai 2016 11:09:43
Problema Paduri de multimi disjuncte Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.69 kb
#include <fstream>
#include <vector>

using namespace std;

int main() {
	ifstream cin("disjoint.in");
	ofstream cout("disjoint.out");

	int n, m;
	cin >> n >> m;

	vector<int> Set(n + 1);
	vector<vector<int>> Nodes(n + 1);
	for(int i = 1; i <= n; ++i) {
		Set[i] = i;
		Nodes[i].push_back(i);
	}

	while(m--) {
		int t, a, b;
		cin >> t >> a >> b;
		if(t == 2) {
			cout << (Set[a] == Set[b] ? "DA\n" : "NU\n");
		} else {
			a = Set[a]; b = Set[b];
			if(Nodes[a].size() > Nodes[b].size())
				swap(a, b);

			Nodes[b].reserve(Nodes[a].size() + Nodes[b].size());
			for(auto x : Nodes[a]) {
				Set[x] = b;
				Nodes[b].push_back(a);
			}

			Nodes[a].clear();
			Nodes[a].shrink_to_fit();
		}
	}
	return 0;
}