Pagini recente » Cod sursa (job #284161) | Cod sursa (job #2951263) | Cod sursa (job #1890838) | Cod sursa (job #2061925) | Cod sursa (job #1475663)
#include <cstdio>
#include <algorithm>
using namespace std;
const int NMAX = 100505;
int n, m, parent[NMAX], rnk[NMAX];
void makeSet(int v) {
parent[v] = v;
rnk[v] = 0;
}
int findSet(int v) {
if (v == parent[v])
return v;
return parent[v] = findSet(parent[v]);
}
void unionSets(int a, int b) {
a = findSet(a); b = findSet(b);
if (a != b) {
if (rnk[b] < rnk[a]) {
swap(a, b);
}
parent[a] = b;
if (rnk[a] == rnk[b])
rnk[b]++;
}
}
void readAndPrepare() {
scanf("%d%d", &n, &m);
for (int i = 1; i <= n; i++)
makeSet(i);
}
void solve() {
int type, a, b;
for (int i = 1; i <= m; i++) {
scanf("%d%d%d", &type, &a, &b);
switch (type) {
case 1: {
unionSets(a, b);
break;
}
case 2: {
if (findSet(a) == findSet(b)) {
printf("DA\n");
} else {
printf("NU\n");
}
break;
}
}
}
}
int main() {
freopen("disjoint.in", "r", stdin);
freopen("disjoint.out", "w", stdout);
readAndPrepare();
solve();
return 0;
}