Cod sursa(job #3285263)

Utilizator rakanDijkstra rakan Data 12 martie 2025 17:23:46
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.92 kb
#include <iostream>
#include <vector>
#include <algorithm>
#include <iostream>
#include <string>
#include <bitset>
#include <queue>
#include <fstream>
#include <stdio.h>
#include <string.h>
#include <iomanip>
#include <stack>
#include <climits>
#include <unordered_map>
#include <map>
#include <set>
using namespace std;

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

int n, m, t[100002];

void Union(int x, int y)
{
	t[x] = y;
}

int Find(int x)
{
	int rad, y;
	rad = x;
	while (t[rad] != 0)
		rad = t[rad];
	/// comprimarea drumului
	while (x != rad)
	{
		y = t[x];
		t[x] = rad;
		x = y;
	}
	return rad;
}

int main()
{
	int i, j, x, y, op;
	fin >> n >> m;
	for (i = 1; i <= n; i++)
		t[i] = 0;
	while (m--)
	{
		fin >> op >> x >> y;
		x = Find(x);
		y = Find(y);
		if (op == 1) Union(x, y);
		else if (x == y) fout << "DA\n";
		else fout << "NU\n";
	}
	return 0;
}