Pagini recente » Cod sursa (job #3363716) | Cod sursa (job #3363713) | Cod sursa (job #3363474) | Cod sursa (job #3363422) | Cod sursa (job #3362872)
#include <iostream>
using namespace std;
const int MAXN = 100000;
int sef[MAXN + 1], siz[MAXN + 1];
int findsef(int i) {
if (i == sef[i]) {
return i;
}
return sef[i] = findsef(sef[i]);
}
void unesc(int x, int y) {
x = findsef(x);
y = findsef(y);
if (x != y) {
if (siz[x] > siz[y]) {
swap(x, y);
}
sef[x] = y;
siz[y] += siz[x];
}
}
int main()
{
FILE *fin, *fout;
int n, m, i, x, y, cer;
fin = fopen("disjoint.in", "r");
fscanf(fin, "%d%d", &n, &m);
for (i = 1; i <= n; i++) {
sef[i] = i;
siz[i] = 1;
}
fout = fopen("disjoint.out", "w");
for (i = 0; i < m; i++) {
fscanf(fin, "%d%d%d", &cer, &x, &y);
if (cer == 1) {
unesc(x, y);
} else if (findsef(x) == findsef(y)) {
fprintf(fout, "DA\n");
} else {
fprintf(fout, "NU\n");
}
}
fclose(fin);
fclose(fout);
return 0;
}