Cod sursa(job #943315)

Utilizator vladtarniceruVlad Tarniceru vladtarniceru Data 24 aprilie 2013 22:06:00
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.69 kb
#include <iostream>
#include <fstream>
using namespace std;

ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int N, M, dad[100100];
int x, y, code;

inline int find(int node) {
	int db = node;
	while (node != dad[node]) node = dad[node];
	int B0$$ = node; // :)
	node = db;
	while (node != dad[node]) {
		int aux = dad[node];
		dad[node] = B0$$;
		node = aux;
	}
	return B0$$;
}
inline void join(int x, int y) {
	dad[x] = y;
}

int main() {
	fin >> N >> M;
	for (int i = 1; i <= N; i++)
		dad[i] = i;
	for (int i = 1; i <= M; i++) {
		fin >> code >> x >> y;
		if (code == 1)
			join(find(x), find(y));
		else
			if (find(x) == find(y))
				fout << "DA\n";
			else
				fout << "NU\n";
	}
}