Pagini recente » Cod sursa (job #2112658) | Cod sursa (job #2693306) | Cod sursa (job #2710006) | Cod sursa (job #1153845) | Cod sursa (job #2616852)
#define submit
#ifdef submit
#define fisier "apm"
#else
#define fisier "ULTRA"
#endif
#include <fstream>
std::ifstream in(fisier ".in");
std::ofstream out(fisier ".out");
template <int N> struct NR {enum {NODURI = N + NR<(N>>1)+(N&1)>::NODURI};};
template <> struct NR<1> {enum {NODURI = 1};};
const int
N = 100000,
M = 100000,
NODURI = NR<N>::NODURI;
struct {int sus = -1, jos = -1;} noduri[NODURI];
int n, m;
int radacina(int nod, int& nivel)
{nivel = 0; while (noduri[nod].sus != -1) nod = noduri[nod].sus, nivel++; return nod;}
int radacina(int nod)
{while (noduri[nod].sus != -1) nod = noduri[nod].sus; return nod;}
int main()
{
in >> n >> m;
int noua_radacina = n;
while (m--)
{
int op, x, y;
in >> op >> x >> y;
x--; y--;
if (op == 1)
{
int
nivel_x,
nivel_y,
sus_x = radacina(x, nivel_x),
sus_y = radacina(y, nivel_y);
if (nivel_x == nivel_y)
{
noduri[sus_x].sus = noua_radacina;
noduri[sus_y].sus = noua_radacina;
noduri[noua_radacina++].jos = sus_x;
}
if (nivel_x < nivel_y)
{
noduri[sus_x].sus = sus_y;
}
if (nivel_x > nivel_y)
{
noduri[sus_y].sus = sus_x;
}
}
else
{
out << (radacina(x) == radacina(y)? "DA": "NU") << "\n";
}
}
}