Cod sursa(job #3271648)

Utilizator AndreiMLCChesauan Andrei AndreiMLC Data 26 ianuarie 2025 19:35:03
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.94 kb
#include <iostream>
#include <vector>
#include <algorithm>
#include <fstream>

using namespace std;

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

const int NMAX = 100005;
int n, m;
int rang[NMAX];
int dad[NMAX];

void do_union(int x, int y)
{
	if (rang[x] < rang[y])
	{
		dad[y] = x;
	}
	else if (rang[x] > rang[y]){
		dad[x] = y;
	}
	else{
		dad[x] = y;
		rang[y]++;
	}
}

int do_find(int nod) 
{
	if (nod != dad[nod]) {
		int repr = do_find(dad[nod]);
		dad[nod] = repr;
		return repr;
	}
	return nod;
}
int main()
{
	f >> n >> m;
	for (int i = 1; i <= n; i++)
	{
		rang[i] = i;
		dad[i] = i;
	}
	for (int i = 1; i <= m; i++)
	{
		int quest, x, y;
		f >> quest >> x >> y;
		int repx = do_find(x);
		int repy = do_find(y);
		if (quest == 1)
		{
			do_union(repx, repy);
		}
		else{
			if (repx == repy)
			{
				g << "DA" << '\n';
			}
			else
			{
				g << "NU" << '\n';
			}
		}
	}
}