Pagini recente » Cod sursa (job #1135953) | Cod sursa (job #155365) | Cod sursa (job #431534) | Cod sursa (job #1127623) | Cod sursa (job #2519799)
#include <bits/stdc++.h>
#define NMAX 100005
#define infile "disjoint.in"
#define outfile "disjoint.out"
using namespace std;
int n, m, c, x, y, T[NMAX], R[NMAX];
void init(int n)
{
for (int i = 1; i <= n; i++)
{
T[i] = i;
R[i] = 1;
}
}
int root(int x)
{
int r, y;
for (r = x; T[r] != r; r = T[r]);
while (T[x] != x)
{
y = T[x];
T[y] = r;
x = y;
}
return r;
}
void reunite(int x, int y)
{
if (R[x] < R[y])
{
T[x] = T[y];
}
else
{
T[y] = x;
}
if (R[x] == R[y])
{
R[y]++;
}
}
void pass(){return;}
int main()
{
freopen(infile, "r", stdin);
freopen(outfile, "w", stdout);
scanf("%d %d", &n, &m);
init(n);
for (int i = 1; i <= m; i++)
{
scanf("%d %d %d", &c, &x, &y);
if (c == 1)
{
reunite(root(x), root(y));
}
else
{
if (root(x) == root(y))
{
printf("DA\n");
}
else
{
printf("NU\n");
}
}
}
fclose(stdin);
fclose(stdout);
return 0;
}