Pagini recente » Cod sursa (job #1065522) | Cod sursa (job #1768062) | Cod sursa (job #2656020) | Cod sursa (job #2815590) | Cod sursa (job #2650400)
#define fisier "disjoint"
#ifdef fisier
#include <fstream>
std::ifstream in(fisier ".in");
std::ofstream out(fisier ".out");
#else
#include <iostream>
#define in std::cin
#define out std::cout
#endif
const int
N = 100000,
M = N;
int n;
#include <vector>
struct Varf {Varf* tata;};
struct Set
{
Varf* graf;
Set(int alocare) {graf = new Varf[alocare]();}
~Set() {delete[] graf;}
inline Varf* get(int element)
{
return graf + element;
}
Varf* radacina(int element)
{
std::vector<Varf*> drum;
Varf* rad = get(element);
while (rad->tata)
{
drum.push_back(rad);
rad = rad->tata;
}
for (Varf* varf: drum)
{
varf->tata = rad;
}
return rad;
}
void uneste(int a, int b)
{
radacina(a)->tata = radacina(b);
}
};
int main()
{
int m;
in >> n >> m;
Set set = n;
while (m--)
{
int op, a, b;
in >> op >> a >> b;
a--, b--;
if (op & 1)
set.uneste(a, b);
else
out << (set.radacina(a) == set.radacina(b)? "DA": "NU") << '\n';
}
}