Cod sursa(job #2667931)

Utilizator bubblegumixUdrea Robert bubblegumix Data 4 noiembrie 2020 08:08:32
Problema Paduri de multimi disjuncte Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.97 kb
#include<fstream>
#include<iostream>
using namespace std;

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

const int LIM = 100005;

int N, M;
int T[LIM], RANG[LIM];



int find(int x)
{
	if (T[x] == 0)
		return x;
	else
	{
		int y = find(T[x]);
		T[x] = y;
		return y;
	}
}
void unite(int m1, int m2)
{
	int T1 = find(m1);
	int T2 = find(m2);
	if (T1 != T2)
	{
		if (RANG[T1] < RANG[T2])
			T[T1] = T2;
		else
		{
			T[T2] = T1;
			if (RANG[T1] == RANG[T2])
				RANG[T1]++;
		}

	}

}

int main()
{

	f >> N >> M;
	int cod, x, y;
	for (int i = 1; i <= M; i++)
	{
		f >> cod >> x >> y;
		if (cod == 1)
			unite(x, y);
		else
		{
			if (find(x) == find(y))
				g << "DA";
			else
				g << "NU";
			g << '\n';

		}
	}




	g << '\n';
	for (int i = 1; i <= N; i++)
		g << i << " ";
	g << '\n';
	for (int i = 1; i <= N; i++)
		g << T[i] << " ";

	


	return 0;
}
/*
1 3 4
1 4 5
1 7 8
1 8 2
1 1 2
1 1 6
*/