Cod sursa(job #925984)

Utilizator vld7Campeanu Vlad vld7 Data 24 martie 2013 21:15:09
Problema Paduri de multimi disjuncte Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.74 kb
#include <fstream>

using namespace std;

ifstream f("disjoint.in");
ofstream g("disjoint.out");

const int MAX_N = 100005;

int n, m, tata[MAX_N], rang[MAX_N];

void unite(int x, int y) {
	if (rang[x] < rang[y])
		tata[x] = y;
	else
		tata[y] = x;
	
	if (rang[x] == rang[y])
		rang[x]++;
}

int find(int x) {
	if (x != tata[x])
		tata[x] = find(tata[x]);
	else
		return x;
}

int main() {
	f >> n >> m;
	
	for (int i = 1; i <= n; i++) {
		tata[i] = i;
		rang[i] = 1;
	}
	
	for (int i = 1; i <= m; i++) {
		int op, x, y;
		
		f >> op >> x >> y;
		if (op == 1)
			unite(x, y);
		else {
			if (find(x) == find(y))
				g << "DA\n";
			else
				g << "NU\n";
		}
	}
	
	f.close();
	g.close();
	
	return 0;
}