Pagini recente » Cod sursa (job #3247394) | Cod sursa (job #2899177) | Cod sursa (job #449470) | Cod sursa (job #2484384) | Cod sursa (job #1872694)
#include <stdio.h>
#define nmax 100010
using namespace std;
int n, m, type, x, y;
int dad[nmax], rang[nmax], sizee[nmax];
int root(int x)
{
if (x == dad[x]) return x; else
return dad[x] = root(dad[x]);
}
void unite(int x, int y)
{
x = root(x);
y = root(y);
if (x == y) return;
if (rang[x] < rang[y]) {
dad[y] = x; sizee[x] += sizee[y];
} else {
dad[x] = y; sizee[y] += sizee[x];
}
if (rang[x] == rang[y]) rang[y]++;
}
int main()
{
freopen("disjoint.in", "r", stdin);
freopen("disjoint.out", "w", stdout);
scanf("%d %d", &n, &m);
for (int i = 1; i <= n; i++) {
dad[i] = i; rang[i] = 0; sizee[i] = 1;
}
for (int i = 1; i <= m; i++) {
scanf("%d %d %d", &type, &x, &y);
if (type == 1) unite(x, y); else {
if (root(x) == root(y)) puts("DA"); else
puts("NU");
}
}
return 0;
}