Pagini recente » Cod sursa (job #667274) | Cod sursa (job #2710805) | Cod sursa (job #1359345) | Cod sursa (job #2141120) | Cod sursa (job #2572558)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
const int MAX_N = 1e5 + 5;
int n, m;
int dad[MAX_N], grade[MAX_N];
int find_set(int x) {
if (dad[x] == x)
return x;
return dad[x] = find_set(dad[x]);
}
void join(int x, int y) {
int x_set, y_set;
x_set = find_set(x);
y_set = find_set(y);
if (grade[x_set] < grade[y_set]) {
grade[x_set] += grade[y_set];
dad[y_set] = x_set;
} else {
grade[y_set] += grade[x_set];
dad[x_set] = y_set;
}
}
int main() {
int op, x, y;
fin >> n >> m;
for (int i = 1; i <= n; ++i) {
dad[i] = i;
grade[i] = 1;
}
while (m --) {
fin >> op >> x >> y;
if (op == 1) {
join(x, y);
} else {
if (find_set(x) == find_set(y)) {
fout << "DA\n";
} else {
fout << "NU\n";
}
}
}
return 0;
}