Cod sursa(job #3003362)

Utilizator vladxandrewVlad Andrei vladxandrew Data 15 martie 2023 18:01:54
Problema Paduri de multimi disjuncte Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.9 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
#define MAX 101
int n, m, t[MAX];
int find(int x)
{
	int y, aux;
	y = x;
	cout << y << " ";
	while (y != t[y])
	{
		cout << y << " ";
		y = t[y];
	}
	cout << endl;

	while (x != y)
	{
		aux = t[x];
		t[x] = y;
		x = aux;
	}

	return x;
}
void unite(int x, int y)
{
	x = find(x);
	y = find(y);
	t[y] = x;
}
int main()
{
	f >> n >> m;
	for (int i = 1; i <= n; ++i)
		t[i] = i;
	for (int i = 1; i <= m; ++i)
	{
		int type, a, b;
		f >> type >> a >> b;
		switch (type)
		{
		case 1: if (find(a) != find(b))	// sa se reuneasca multimea care contine a
					unite(a, b);		// cu cea care contine b
				break; 
		case 2: if (find(a) == find(b)) // a si b in aceeasi multime?
					g << "DA" << '\n'; 
				else 
					g << "NU" << '\n';
				break;
		}
	}
}