Pagini recente » Cod sursa (job #52923) | Cod sursa (job #1425576) | Cod sursa (job #2257606) | Cod sursa (job #319490) | Cod sursa (job #2805415)
#include <bits/stdc++.h>
using namespace std;
ifstream in("disjoint.in");
ofstream out("disjoint.out");
const int MAX = 100001;
class Graf
{
int NrNoduri;
public:
Graf(int NrNoduri);
int gaseste(int nod, int v[MAX]);
int uneste(int nod1, int nod2, int v[MAX], int inaltime[MAX]);
};
Graf::Graf(int NrNoduri)
{
this->NrNoduri = NrNoduri;
}
int Graf::gaseste(int nod, int v[MAX])
{
int i = nod;
while(v[i] != i)
i = v[i];
while(v[nod] != nod)
{
int aux = v[nod];
v[nod] = i;
nod = aux;
}
return i;
}
int Graf::uneste(int nod1, int nod2, int v[MAX], int inaltime[MAX])
{
if(inaltime[nod1] > inaltime[nod2])
v[nod2] = nod1;
else
v[nod1] = nod2;
if(inaltime[nod1] == inaltime[nod2])
inaltime[nod2]++;
}
int main()
{
int nod1, nod2, operatie, v[MAX], inaltime[MAX] = {1};
int N, M;
in >> N >> M;
for(int i = 0; i < N; i++)
v[i] = i;
Graf g(N);
for(int i = 0; i < M; i++)
{
in >> operatie >> nod1 >> nod2;
if(operatie == 2)
if(g.gaseste(nod1, v) == g.gaseste(nod2, v))
out << "DA\n";
else
out << "NU\n";
else
g.uneste(g.gaseste(nod1, v), g.gaseste(nod2, v), v, inaltime);
}
return 0;
}