Pagini recente » Cod sursa (job #860293) | Cod sursa (job #2750546) | Cod sursa (job #1686162) | Cod sursa (job #96896) | Cod sursa (job #3029922)
#include <fstream>
#include <iostream>
using namespace std;
const int NMAX = 1e5;
int djs[1 + NMAX];
int djs_height[1 + NMAX];
int djs_root(int a) {
if (djs[a] == a) {
return a;
}
djs[a] = djs_root(djs[a]);
return djs[a];
}
void djs_join(int a, int b) {
a = djs_root(a);
b = djs_root(b);
if (a == b) {
return;
}
if (djs_height[a] < djs_height[b]) {
djs[a] = b;
} else if (djs_height[a] > djs_height[b]) {
djs[b] = a;
} else {
djs[a] = b;
++djs_height[b];
}
}
int main() {
ifstream r("disjoint.in");
ofstream w("disjoint.out");
int n, m;
r >> n >> m;
for (int i = 1; i <= n; ++i) {
djs[i] = i;
djs_height[i] = 1;
}
while (m--) {
int type, a, b;
r >> type >> a >> b;
if (type == 1) {
djs_join(a, b);
continue;
}
int set_a = djs_root(a);
int set_b = djs_root(b);
w << (set_a == set_b ? "DA" : "NU") << '\n';
}
return 0;
}