Cod sursa(job #2424060)

Utilizator AndreiAsAndrei Sugeac AndreiAs Data 22 mai 2019 15:59:38
Problema Paduri de multimi disjuncte Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.85 kb
#include <iostream>
#include <fstream>
#include <cstring>
#define nmax 100000
using namespace std;

int N, M;
int tati[nmax];
int grad[nmax];

int find(int nod) {
	if (tati[nod] == nod)
		return nod;
	else
	{
		int t = find(tati[nod]);
		tati[nod] = t;
		return t;
	}
}

void reuniune(int a, int b) {
	int ta = find(a);
	int tb = find(b);

	if (grad[ta] < grad[tb]) {
		tati[ta] = tb;
		grad[tb] += grad[ta];
	}
	else {
		tati[tb] = ta;
		grad[ta] += tb;
	}
}

int main()
{
	ifstream f("disjoint.in");
	ofstream g("disjoint.out");
	f >> N >> M;
	for (int i = 1; i <= N; ++i) {
		tati[i] = i;
		grad[i] = 1;
	}
	for(int i = 1; i <= M; ++i) {
		int op, a, b;
		f >> op >> a >> b;
		if(op == 1)
			reuniune(a, b);
		else
		{
			if (find(a) == find(b)) g << "DA" << endl;
			else g << "NU" << endl;
		}
	}
	return 0;
}