Cod sursa(job #2723509)

Utilizator MateGMGozner Mate MateGM Data 14 martie 2021 13:04:17
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.64 kb
#include <iostream>
#include <algorithm>
#include <fstream>
#include <vector>

using namespace std;

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

int gyoker(int csucs, vector<int>& apa){
	int gyoker = csucs;
	while (gyoker != apa[gyoker])
	{
		gyoker = apa[gyoker];
	}

	while (csucs != gyoker)
	{
		int regi_apa = apa[csucs];
		apa[csucs] = gyoker;
		csucs = regi_apa;
	}

	return gyoker;
}

void hozzaad(int i, int j, vector<int>& apa, vector<int>& meret)
{
	int i_gyokere = gyoker(i, apa);
	int j_gyokere = gyoker(j, apa);

	if (meret[i_gyokere] > meret[j_gyokere])
	{
		apa[j_gyokere] = i_gyokere;
		meret[j_gyokere] += meret[i_gyokere];
	}
	else
	{
		apa[i_gyokere] = j_gyokere;
		meret[i_gyokere] += meret[j_gyokere];
	}

}

bool elerheto(int i, int j, vector<int>& apa)
{
	if (gyoker(i, apa) == gyoker(j, apa)) return true;
	return false;
}

int main()
{
	int n, k;
	be >> n >> k;

	vector<int> apa(n + 1);
	vector<int> meret(n + 1, 1);


	for (int i = 1; i <= n; i++){
		apa[i] = i;
	}

	for (int i = 0; i < k; i++)
	{
		//string muvelet;
		int muvelet;
		int kezdp, vegp;
		be >> muvelet >> kezdp >> vegp;


		/*if (muvelet == "ELERHETO")
		{
			if (elerheto(kezdp, vegp, apa)) ki << "1" << endl;
			else ki << "0" << endl;
		}
		else if (muvelet == "HOZZAAD")
		{
			if (!elerheto(kezdp, vegp, apa)) hozzaad(kezdp, vegp, apa, meret);

		}*/

		if (muvelet == 2)
		{
			if (elerheto(kezdp, vegp, apa)) ki << "DA" << "\n";
			else ki << "NU" << "\n";
		}
		else if (muvelet == 1)
		{
			if (!elerheto(kezdp, vegp, apa)) hozzaad(kezdp, vegp, apa, meret);

		}
	}
}