Cod sursa(job #1371372)

Utilizator MarronMarron Marron Data 3 martie 2015 21:04:21
Problema Paduri de multimi disjuncte Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include <iostream>
#include <fstream>


const int MAXN = 100005;
std::ifstream f("disjoint.in");
std::ofstream g("disjoint.out");
int parent[MAXN]; int n;


void unite(int x, int y)
{
	while (x != parent[x]) {
		int aux = parent[x];
		parent[x] = y;
		x = aux;
	}
	parent[x] = y;
}


void query(int x, int y)
{
	int cx = x, cy = y;
	while (parent[x] != x) {
		x = parent[x];
	}
	while (parent[y] != y) {
		y = parent[y];
	}

	if (x == y) {
		g << "DA\n";
		/*while (cx != parent[cx]) {
			int aux = parent[cx];
			parent[cx] = y;
			cx = aux;
		}
		while (cy != parent[cy]) {
			int aux = parent[cy];
			parent[cy] = y;
			cy = aux;
		}*/
	}
	else {
		g << "NU\n";
	}
}


int main()
{
	int m;
	f >> n >> m;
	for (int i = 1; i <= n; i++) {
		parent[i] = i;
	}

	for (int i = 1, op, x, y; i <= m; i++) {
		f >> op >> x >> y;

		if (op == 1) unite(x, y);
		if (op == 2) query(x, y);
	}


	//system("pause");
	f.close();
	g.close();
	return 0;
}