Pagini recente » Cod sursa (job #149396) | Cod sursa (job #1463754) | Cod sursa (job #1996665) | Cod sursa (job #2592136) | Cod sursa (job #2778281)
#include <fstream>
using namespace std;
void disjoint(ifstream &in, ofstream &out) {
int n, m, i, code, x, y;
in >> n >> m;
// p[i] = parintele lui i;
// size[i] = nr de elemente detinute de arborele cu radacina i
int p[n], size[n];
for (i = 0; i < n; i++)
p[i] = i, size[i] = 1;
for (i = 0; i < m; i++) {
in >> code >> x >> y;
int r1 = x - 1, r2 = y - 1;
while (r1 != p[r1]) r1 = p[r1];
while (r2 != p[r2]) r2 = p[r2];
if (code == 1) {
if (size[r1] <= size[r2]) {
p[r1] = r2;
size[r2] += size[r1];
size[r1] = 0;
} else {
p[r2] = r1;
size[r1] += size[r2];
size[r2] = 0;
}
} else {
(r1 == r2) ? (out << "DA") : (out << "NU");
out << '\n';
}
}
}
int main(void) {
ifstream in("disjoint.in");
ofstream out("disjoint.out");
disjoint(in, out);
in.close();
out.close();
return 0;
}