Pagini recente » Cod sursa (job #2192744) | Cod sursa (job #2967424) | Cod sursa (job #2789866) | Cod sursa (job #2054425) | Cod sursa (job #1482078)
#include <bits/stdc++.h>
using namespace std;
int n, m;
int multime[100005], rang[100005];
int find(int x)
{
int root, swap_variable;
for (root = x; multime[root] != root; root = multime[root]); ///gasim radacina multimii
/*for (; x != multime[x]; x = multime[x]) ///
{
swap_variable = multime[x];
multime[x] = x;
x = swap_variable;
}*/
return root;
}
void unite(int x, int y)
{
if (rang[y] > rang[x])
multime[x] = y;
else multime[y] = x;
if (x == y) rang[x]++;
}
int main()
{
freopen("disjoint.in", "r", stdin);
freopen("disjoint.out", "w", stdout);
scanf("%d %d", &n, &m);
for (int i = 1; i <= n; i++)
multime[i] = i, rang[i] = 1; ///initial rangul 1, si fiecare multime are doar el. i
for (int i = 1, op, x, y; i <= m; i++)
{
scanf("%d %d %d", &op, &x, &y);
x = find(x); y = find(y);
if (op == 2)
printf(x == y ? "DA\n" : "NU\n");
else
unite(x, y);
}
return 0;
}