Pagini recente » Cod sursa (job #3349659) | Cod sursa (job #2295513) | Cod sursa (job #1755307) | Cod sursa (job #3305213) | Cod sursa (job #3341246)
#include <fstream>
#include <vector>
using namespace std;
ifstream cin("disjoint.in");
ofstream cout("disjoint.out");
struct Paduri {
vector<int> tata;
vector<int> size;
Paduri(int n) {
tata.resize(n + 1);
size.resize(n + 1, 1);
}
int rad(int x) {
if (tata[x] == 0) {
return x;
} else {
// tata[x] = rad(tata[x]);
// return tata[x];
return rad(tata[x]);
}
}
bool query(int a, int b) {
return rad(a) == rad(b);
}
void join(int a, int b) {
if (query(a, b)) { return; }
b = rad(b);
a = rad(a);
if (size[a] < size[b]) {
swap(a, b);
}
tata[b] = a;
size[a] += size[b];
}
};
int main() {
int n, m; cin >> n >> m;
Paduri disjoin(n);
for (int i = 0; i < m; i++) {
int t, x, y; cin >> t >> x >> y;
if (t == 1) {
disjoin.join(x, y);
} else {
cout << (disjoin.query(x, y) ? "DA\n" : "NU\n");
}
}
return 0;
}