Pagini recente » Cod sursa (job #3145163) | Cod sursa (job #831405) | Cod sursa (job #2475753) | Cod sursa (job #2565582) | Cod sursa (job #2654968)
#include <cstdio>
#include <vector>
using namespace std;
vector<int> parents;
vector<int> ranks;
void join(int a, int b) {
if (ranks[a] > ranks[b])
parents[b] = a;
else
parents[a] = b;
if (ranks[a] == ranks[b])
++ranks[b];
}
int get(int a) {
int i, aux;
for(i=a; parents[i] != i; i = parents[i]);
while(parents[a] != a) {
aux = parents[a];
parents[a] = i;
a = aux;
}
return i;
}
bool common(int a, int b) {
return get(a) == get(b);
}
int main() {
freopen("disjoint.in", "r", stdin);
freopen("disjoint.out", "w", stdout);
int n, m, a, b, c;
scanf("%d%d", &n, &m);
parents.resize(n+1);
ranks.resize(n+1);
for(int i=1; i<=n; ++i) {
ranks[i] = 1;
parents[i] = i;
}
for(int i=0; i<m; ++i) {
scanf("%d%d%d", &a, &b, &c);
if (a == 1)
if (! common(b, c))
join(get(b), get(c));
else;
else
if (common(b, c))
printf("DA\n");
else
printf("NU\n");
}
return 0;
}