Cod sursa(job #2723505)

Utilizator MateGMGozner Mate MateGM Data 14 martie 2021 12:55:37
Problema Paduri de multimi disjuncte Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.63 kb
#include <iostream>
#include <algorithm>
#include <fstream>


using namespace std;

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

int gyoker(int csucs, 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, int* apa, 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, int* apa)
{
	if (gyoker(i, apa) == gyoker(j, apa)) return true;
	return false;
}

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

	int* apa = new int[n + 1];
	int* meret = new int[n + 1];


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

	for (int i = 0; i < k; i++)
	{
		//string muvelet;
		int muvelet;
		int kezdp, vegp;
		f >> 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" << endl;
			else ki << "NU" << endl;
		}
		else if (muvelet == 1)
		{
			if (!elerheto(kezdp, vegp, apa)) hozzaad(kezdp, vegp, apa, meret);

		}
	}

	return 0;
}