Pagini recente » Cod sursa (job #3273893) | Cod sursa (job #2545345) | Cod sursa (job #1450555) | Cod sursa (job #701216) | Cod sursa (job #2942954)
#include <iostream>
#include <fstream>
#include <vector>
#include <list>
#include <queue>
#define nmax 100020
using namespace std;
//ifstream fin ("/Users/tindechealexandru/Library/CloudStorage/OneDrive-unibuc.ro/Documents/UniBuc Files (notes and hw)/Anul 2/Sem 1/Algoritmi Fundamentali/Lab/Solver/input.txt");
//ofstream fout ("/Users/tindechealexandru/Library/CloudStorage/OneDrive-unibuc.ro/Documents/UniBuc Files (notes and hw)/Anul 2/Sem 1/Algoritmi Fundamentali/Lab/Solver/output.txt");
ifstream fin ("disjoint.in");
ofstream fout ("disjoint.out");
int n, m;
int tata[nmax], rang[nmax];
void make()
{
for (int i = 1; i <= n; i++)
{
// Construim arborele cu radacina i
tata[i] = i;
rang[i] = 1;
}
}
int find(int x)
{
int radacina = x;
while(tata[radacina] != radacina)
radacina = tata[radacina];
tata[x] = radacina;
return radacina;
}
void unite(int x, int y)
{
// Cautam radacinile ca sa unim cele doua grafuri
// Radacina grafului cu rangul mai mic va deveni radacina celui cu rang mai mare
int radacina_x = find(x);
int radacina_y = find(y);
if(radacina_x == radacina_y)
return;
if(rang[radacina_x] > rang[radacina_y])
{
tata[radacina_y] = radacina_x;
rang[radacina_x] = rang[radacina_x] + rang[radacina_y];
}
else
{
tata[radacina_x] = radacina_y;
rang[radacina_y] = rang[radacina_y] + rang[radacina_x];
}
}
int main() {
fin >> n >> m;
// Construim arborii care contin doar un singur nod (cele n noduri)
// Arborii o sa contina ca radacina doar nodul insusi si va avea rangul 1, iar tatal fiecarui nod va fi el insusi
make();
// for(int i = 1; i <= n; i++) aici doar am testat sa vad ca merge functia make
// {
// cout << tata[i] << ' ';
// cout << rang[i] << '\n';
// }
// Citim instructiunile si cele doua numere cu care trebuie sa facem operatii pe multimi
for(int i = 1; i <= m; i++)
{
int op, x, y;
fin >> op >> x >> y;
if(op == 1) // unite
unite(x, y);
else // find
{
if(find(x) == find(y))
fout << "DA" << '\n';
else
fout << "NU" << '\n';
}
}
return 0;
}