Cod sursa(job #2423714)

Utilizator AlexBlagescuBlagescu Alex George AlexBlagescu Data 21 mai 2019 21:28:31
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.93 kb
#include <fstream>
#include <vector>
using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");

int main()
{
	int n, m;
	f >> n >> m;

	vector < int > comp(n + 1);
	vector < vector <int> > L(n + 1);

	for (int i = 1; i <= n; i++) {
		comp[i] = i;
		L[i].push_back(i);
	}

	for (int i = 1; i <= m; i++) {
		int cod, x, y;
		f >> cod >> x >> y;
		if (cod == 1) {
			if (L[comp[x]].size() < L[comp[y]].size()) {

				auto cx = L[comp[x]].begin(), cy = L[comp[x]].end();
				for (auto i = cx; i != cy; i++) {
					comp[(*i)] = comp[y];
					L[comp[y]].push_back((*i));
				}
				//L[comp[x]].clear();
			}
			else {
				auto cx = L[comp[y]].begin(), cy = L[comp[y]].end();
				for (auto i = cx; i != cy; i++) {
					comp[(*i)] = comp[x];
					L[comp[x]].push_back((*i));
				}
				//L[comp[y]].clear();
			}
		}
		else {
			if (comp[x] == comp[y])	g << "DA\n";
			else g << "NU\n";
		}
	}
}