Cod sursa(job #1741032)

Utilizator Bulgaru_Robert_Razvan_323CBBulgaru Robert Razvan Bulgaru_Robert_Razvan_323CB Data 12 august 2016 20:05:08
Problema Paduri de multimi disjuncte Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.73 kb
#include <fstream>

using namespace std;

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

int N,M,op,x,y;

int r[100003],p[100003];

void make_set(int x) {
	p[x]=x;
	r[x]=0;
}

int find_set(int x) {
	if (x!=p[x])
		p[x]=find_set(p[x]);

	return p[x];
}

void union_set(int x,int y) {
	int px=find_set(x);
	int py=find_set(y);

	if (r[px]>r[py]) {
		p[py]=px;
	}
	else {
		p[px]=py;
	}

	if (r[px]==r[py]) {
		p[py]=px;
		r[px]++;
	}
}

int main() {
	in>>N>>M;

	for (int i=1;i<=N;i++) {
		make_set(i);
	}

	for (int i=1;i<=M;i++) {
		in>>op>>x>>y;
		//make_set(x); make_set(y);
		if (op==1) {
			union_set(x,y);
		}
		else {
			if (find_set(x)==find_set(y)) {
				out<<"DA\n";
			}
			else {
				out<<"NU\n";
			}
		}
	}

	return 0;
}