Cod sursa(job #1925475)

Utilizator oanaroscaOana Rosca oanarosca Data 13 martie 2017 11:31:02
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.65 kb
#include <fstream>

using namespace std;

int n, op, cod, x, y, p[100001], rang[100001];

void initp () {
	for (int i = 1; i <= n; i++)
		p[i] = i;
}

void uniune (int r1, int r2) {
	if (rang[r1] > rang[r2])
		p[r2] = r1;
	else {
		p[r1] = r2;
		if (rang[r1] == rang[r2])
			rang[r2]++;
	}
}

int findset (int x) {
	while (p[x] != x)
		x = p[x];
	return x;
}

int main () {
	ifstream fi("disjoint.in");
	ofstream fo("disjoint.out");
	fi >> n >> op; initp();
	for (int i = 1; i <= op; i++) {
		fi >> cod >> x >> y;
		if (cod == 1)
			uniune(findset(x), findset(y));
		else
			if (findset(x) == findset(y))
				fo << "DA\n";
			else
				fo << "NU\n";
	}
	return 0;	
}