Cod sursa(job #1242251)

Utilizator vlad2901Vlad Berindei vlad2901 Data 14 octombrie 2014 10:08:36
Problema Paduri de multimi disjuncte Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.8 kb
#include <fstream>
#include <cstring>

#define MAXN 100001

using namespace std;

ifstream fin("disjoint.in");
ofstream fout("disjoint.out");

int n, m;
int s[MAXN];

int main() {
	int op, a, b;
	fin >> n >> m;
	memset(s, -1, sizeof(s));
	for (int i = 0; i < m; ++i) {
		fin >> op >> a >> b;
		int aux_a = a;
		while (s[a] > 0) {
			a = s[a];
		}
		int aux_b = b;
		while (s[b] > 0) {
			b = s[b];
		}
		if (op == 1) {
			//reuniune
			if (s[a] < s[b]) {
				s[a] += s[b];
				s[b] = a;
				if (aux_a != a) {
					s[aux_a] = s[aux_b] = a;
				}
			} else {
				s[b] += s[a];
				s[a] = b;
				if (aux_b != b) {
					s[aux_a] = s[aux_b] = b;	
				}
			}
		} else {
			if (a == b) {
				fout << "DA" << endl;
			} else {
				fout << "NU" << endl;
			}
		}
	}
	return 0;
}