Pagini recente » Cod sursa (job #1790369) | Cod sursa (job #2460709) | Cod sursa (job #2342201) | Cod sursa (job #1865560) | Cod sursa (job #1611100)
#include<fstream>
#include<queue>
using namespace std;
ifstream in("disjoint.in");
ofstream out("disjoint.out");
int T[100010], N, Q;
queue<int> q;
void join(int x, int y)
{
int x1 = x, y1 = y;
while (T[x] > 0)
{
q.push(x);
x = T[x];
}
while (T[y] > 0)
{
q.push(y);
y = T[y];
}
if (T[x] < T[y])
{
T[x] += T[y];
T[y] = x;
while (q.size())
{
T[q.front()] = x;
q.pop();
}
}
else
{
T[y] += T[x];
T[x] = y;
while (q.size())
{
T[q.front()] = y;
q.pop();
}
}
}
bool check(int x, int y)
{
while (T[x]>0)
x = T[x];
while (T[y]>0)
y = T[y];
return (x == y);
}
int main()
{
in >> N>>Q;
for (int i = 1;i <= N;++i)
T[i] = -1;
for (int i = 1;i <= Q;++i)
{
int op, x, y;
in >> op >> x >> y;
if (op == 1)
join(x, y);
else if (check(x, y))
out << "DA\n";
else
out << "NU\n";
}
return 0;
}