Cod sursa(job #1018522)

Utilizator harababurelPuscas Sergiu harababurel Data 29 octombrie 2013 18:24:49
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.73 kb
#include <iostream>
#include <fstream>
#define nmax 100005
using namespace std;

int v[nmax];
int n, m, op, a, b, x, y;

int find(int x) {
	if(v[x] < 0) return x;		//x ii radacina

	v[x] = find(v[x]);
	return v[x];
}

void join(int root1, int root2) {
	if(v[root1] < v[root2]) {	//arborele 1 ii mai mare
		v[root1] += v[root2];
		v[root2] = root1;
	}
	else {
		v[root2] += v[root1];
		v[root1] = root2;
	}
}

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

	f>>n>>m;
	for(int i=1; i<=n; i++) v[i] = -1;
	for(int i=1; i<=m; i++) {
		f>>op>>a>>b;

		x = find(a);
		y = find(b);

		if(op == 2) {
			if(x==y) g<<"DA\n";
			else g<<"NU\n";
		}
		else join(x, y);
	}

	return 0;
}