Pagini recente » Cod sursa (job #2708711) | Cod sursa (job #1109471) | Cod sursa (job #2208901) | Cod sursa (job #2357710) | Cod sursa (job #1735789)
#include<fstream>
#include<algorithm>
#include<vector>
#include<string.h>
using namespace std;
int v[200010];
int a[200010];
int level[200010];
ifstream in("disjoint.in");
ofstream out("disjoint.out");
void reunion(int x,int y)
{
int r1=x, r2=y;
while (a[r1] != 0)
r1 = a[r1];
while (a[r2] != 0)
r2 = a[r2];
if (level[r1] < level[r2])
{
a[r1] = r2;
while (a[x])
{
int e = a[x];
a[x] = r2;
x = e;
}
}
else
{
a[r2] = r1;
while (a[y])
{
int e = a[y];
a[y] = r1;
y = e;
}
}
}
int same_set(int x, int y)
{
int r1 = x, r2 = y;
while (a[r1] != 0)
r1 = a[r1];
while (a[r2] != 0)
r2 = a[r2];
return r1 == r2;
}
int main()
{
int N,M;
in >> N >> M;
for (int i = 1;i <= M;++i)
{
int op, x, y;
in >> op >> x >> y;
if (op == 1)
{
reunion(x, y);
}
else
{
out << (same_set(x,y) ? "DA\n" : "NU\n");
}
}
return 0;
}