Pagini recente » Cod sursa (job #1173865) | Monitorul de evaluare | Cod sursa (job #428397) | Cod sursa (job #1110634) | Cod sursa (job #2661362)
#include <bits/stdc++.h>
using namespace std;
#define REP(i, a, b) for (int i = a; i <= b; i++)
#define PER(i, a, b) for (int i = b; i >= a; i--)
#define TRmsi(x, it) for (map<string, int>::iterator it = x.begin(); it != x.end(); it++)
#define TRvi(x, it) for (vector<int>::iterator it = x.begin(); it != x.end(); it++)
#define TRvii(x, it) for (vector<pair<int, int>>::iterator it = x.begin(); it != x.end(); it++)
#define mp make_pair
#define pb push_back
typedef long long ll;
typedef double db;
typedef vector<int> vi;
typedef pair<int, int> pii;
typedef vector<int, int> vii;
typedef map<string, int> msi;
#define MAXVAL 10000
int parent[MAXVAL];
int n_elem[MAXVAL];
int traverse(int x) {
if (x != parent[x]) {
parent[x] = traverse(parent[x]);
return parent[x];
}
return x;
}
bool find(int x, int y) {
// cout << x << ' ' << traverse(x) << '\n' << y << ' ' << traverse(y) << '\n';
return traverse(x) == traverse(y);
}
void uni(int x, int y) {
if (n_elem[x] <= n_elem[y]) {
int root_x = traverse(x);
int root_y = traverse(y);
n_elem[root_y] += n_elem[root_x];
parent[root_x] = root_y;
}
}
int main() {
freopen("disjoint.in", "r", stdin);
freopen("disjoint.out", "w", stdout);
int n, n_q;
cin >> n >> n_q;
REP(i, 1, n) {
parent[i] = i;
}
REP(i, 1, n) {
n_elem[i] = 1;
}
REP(i, 1, n_q) {
int q, a, b;
cin >> q >> a >> b;
if (q == 1) {
uni(a, b);
}
else {
cout << (find(a, b)? "DA\n" : "NU\n");
}
}
return 0;
}