Cod sursa(job #3201602)

Utilizator panterasbook29Turcu Stiolica Alexandru panterasbook29 Data 9 februarie 2024 09:41:42
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.72 kb
#include<bits/stdc++.h>

using namespace std;

ifstream fin("disjoint.in");
ofstream fout("disjoint.out");

int n, m;
int rad[100002], card[100002];

int Find(int x)
{
	if(rad[x] == x)
		return x;
	rad[x] = Find(rad[x]);
	return rad[x];
}
void Union(int a, int b)
{
	if(card[a] < card[b])
		swap(a, b);
	rad[b] = a;
	card[a] += card[b];
}
int main()
{

	fin >> n >> m;

	for(int i = 1; i <= n; ++i)
		rad[i] = i, card[i] = 1;

	for(int i = 1; i <= m; ++i)
	{
		int cod, x, y;
		fin >> cod >> x >> y;
		if(cod == 1)
		{
			if(Find(x) != Find(y))
				Union(Find(x), Find(y));
		}
		else
		{
			if(Find(x) == Find(y))
				fout << "DA\n";
			else
				fout << "NU\n";
		}
	}
	return 0;
}