Pagini recente » Cod sursa (job #2071584) | Cod sursa (job #435979) | Profil MrPetcu | Cod sursa (job #2112840) | Cod sursa (job #2950339)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f ("disjoint.in");
ofstream g ("disjoint.out");
int n,m;
int tata[100002]; // O(O(m log n))
int x,y,code;
int gasire_radacina (int x) // gasirea radacinii cu vectorul de tati
{
int radacina = x;
while (tata[radacina] > 0)
{
radacina = tata[radacina];
}
while (tata[x] > 0)
{
tata[x] = radacina;
x = tata[x];
}
return radacina;
}
void reuniune_grafuri (int x, int y) // reunim doua grafuri prin atribuirea tatalui lui y valoarea x
{
tata[gasire_radacina(y)] = gasire_radacina(x);
}
bool verif (int x, int y) // verificam daca doua noduri sunt in acelasi graf
{
if (gasire_radacina(x) == gasire_radacina(y))
return true;
else
return false;
}
int main ()
{
f >> n >> m;
for (int i=1; i<=n; i++) //pt fiecare nod parintele sau e 0 pt ca fiecare nod i e radacina
tata[i] = -1;
for (int i=1; i<=m; i++)
{
f >> code >> x >> y;
if (code == 1)
reuniune_grafuri (x,y);
else if (verif(x,y))
g << "DA\n";
else
g << "NU\n";
}
return 0;
}