Cod sursa(job #2073167)

Utilizator pelokbence575Pelok Benedek pelokbence575 Data 22 noiembrie 2017 19:24:01
Problema Paduri de multimi disjuncte Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.98 kb
#include <iostream>
#include <fstream>
#include <string>

#define NMAX 100000

int points[NMAX];
int lengths[NMAX];

using namespace std;

int rooter(int target) {
	int root = target;
	while (root != points[root]) {
		root = points[root];
	}
	return root;
}

void unite(int point1, int point2) {
	int root1 = rooter(point1);
	int root2 = rooter(point2);

	if (root1 != root2) {
		points[root1] = root2;
	}
}

int main() {
	ifstream input("disjoint.in");
	ofstream output("disjoint.out");

	int n, m;

	input >> n >> m;

	for (int i = 0; i < n; ++i) {
		points[i] = i;
	}

	int order, from, to;

	for (int i = 0; i < m; ++i) {
		input >> order >> from >> to;
		if (order == 1) {
			int p1 = rooter(from - 1);
			int p2 = rooter(to - 1);

			unite(p1, p2);
		}
		else {
			if (rooter(from - 1) == rooter(to - 1)) {
				output << "DA" << endl;
			}
			else {
				output << "NU" << endl;
			}
		}
	}
	input.close();
	output.close();
	return 0;
}