Pagini recente » Cod sursa (job #1493606) | Cod sursa (job #1833252) | Cod sursa (job #2586018) | Cod sursa (job #2705641) | Cod sursa (job #1611086)
#include<fstream>
using namespace std;
ifstream in("disjoint.in");
ofstream out("disjoint.out");
int T[100010], N, Q;
void join(int x, int y)
{
int x1 = x, y1 = y;
while (T[x]>0)
x = T[x];
while (T[y]>0)
y = T[y];
if (T[x] < T[y])
{
T[x] += T[y];
T[y] = x;
while (T[y1]>0)
{
int e = y1;
y1= T[y1];
T[e] = x;
}
}
else
{
T[y] += T[x];
T[x] = y;
while (T[x1]>0)
{
int e = x1;
x1 = T[x1];
T[e] = y;
}
}
}
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;
}