Pagini recente » Cod sursa (job #2316301) | Cod sursa (job #1423951) | Cod sursa (job #2079506) | Cod sursa (job #786528) | Cod sursa (job #2080557)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f ("disjoint.in");
ofstream g ("disjoint.out");
const int NMAX = 100000 + 1;
int n;
int t[NMAX + 1];
int h[NMAX + 1];
void init() {
for (int i = 1; i <= n; i++) {
t[i] = 0;
h[i] = 1;
}
}
int get_radacina(int a) {
if (t[a] == 0) return a;
t[a] = get_radacina(t[a]);
return t[a];
}
bool query(int a, int b) {
return get_radacina(a) == get_radacina(b);
}
void unite(int a, int b) {
int ra = get_radacina(a);
int rb = get_radacina(b);
if (ra == rb) return;
if (h[ra] >= h[rb]) {
t[rb] = ra;
h[ra] = max(h[ra], h[rb] + 1);
}
else {
t[ra] = rb;
h[rb] = max(h[rb], h[ra] + 1);
}
}
void rezolva() {
int m, op, a, b;
f >> m;
for (int i = 1; i <= m; i++) {
f >> op >> a >> b;
if (op == 1) unite(a, b);
else {
if (query(a, b)) g << "DA";
else g << "NU";
g << '\n';
}
}
}
int main() {
f >> n;
init();
rezolva();
return 0;
}