Pagini recente » Cod sursa (job #3360212) | Cod sursa (job #3360205)
#include <fstream>
#include <vector>
using namespace std;
struct Padure {
vector<int> padure;
vector<int> sz;
Padure(int n) {
padure.resize(n + 2);
sz.resize(n + 2, 1);
}
int rad(int i) {
if (padure[i] == 0) {
return i;
}
padure[i] = rad(padure[i]);
return padure[i];
}
void join(int i, int j) {
i = rad(i);
j = rad(j);
if (i == j) {
return;
}
if (sz[i] > sz[j]) {
swap(i, j);
}
padure[i] = j;
sz[j] += sz[i];
}
};
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int main() {
int n, m;
fin >> n >> m;
Padure padure(n);
int tip, x, y;
for (int i = 1; i <= m; i++) {
fin >> tip >> x >> y;
if (tip == 1) {
padure.join(x, y);
} else {
if (padure.rad(x) == padure.rad(y)) {
fout << "DA\n";
} else {
fout << "NU\n";
}
}
}
return 0;
}