Pagini recente » Cod sursa (job #2144119) | Cod sursa (job #2742042) | Cod sursa (job #3184858) | Cod sursa (job #3145987) | Cod sursa (job #2458423)
#include <stdio.h>
#define N_MAX 100000
using namespace std;
FILE *fin = fopen("disjoint.in", "r");
FILE *fout = fopen("disjoint.out", "w");
int N, Q;
int boss[N_MAX + 1];
int h[N_MAX + 1];
int find(int u) {
if (boss[u] == u)
return u;
else {
boss[u] = find(boss[u]);
return find(boss[u]);
}
}
void unify(int u, int v) {
int i, j;
i = find(u);
j = find(v);
// boss[j] = i;
if (h[i] > h[j]) {
boss[j] = i;
}
else {
if (h[i] < h[j])
boss[i] = j;
else {
boss[i] = j;
h[j]++;
}
}
}
int main(){
int i, j;
int x, y;
int opp;
fscanf(fin, "%d %d", &N, &Q);
for (i = 1; i <= N; i++) {
boss[i] = i;
h[i] = 1;
}
for (i = 1; i <= Q; i++) {
fscanf(fin, "%d", &opp);
fscanf(fin, "%d %d", &x, &y);
if(opp == 1) {
unify(x, y);
}
else {
if(find(x) == find(y))
fprintf(fout, "DA\n");
else
fprintf(fout, "NU\n");
}
}
fclose(fin);
fclose(fout);
return 0;
}