Pagini recente » Cod sursa (job #2486460) | Cod sursa (job #936628) | Cod sursa (job #1592862) | Cod sursa (job #916719) | Cod sursa (job #1795698)
#include <stdio.h>
int tati[100002], marime[100002];
inline int find1(int x) {
int i;
i = x;
while(i != tati[i])
i = tati[i];
return i;
}
inline int union1(int x, int y) {
int tatix, taty;
tatix = find1(x);
taty = find1(y);
if(tatix == taty)
return 0;
if(marime[tatix] == marime[taty]) {
marime[tatix]++;
}
if(marime[tatix] > marime[taty])
tati[taty] = tatix;
else
tati[tatix] = taty;
return 0;
}
int main() {
FILE *fin, *fout;
fin = fopen("disjoint.in", "r");
fout = fopen("disjoint.out", "w");
int n, m;
fscanf(fin, "%d%d", &n, &m);
int i;
int op;
for(i = 1;i <= n;i++) {
tati[i] = i;
marime[i] = 1;
}
int x, y;
for(i = 0;i < m;i++) {
fscanf(fin, "%d", &op);
fscanf(fin, "%d%d", &x, &y);
// printf("%d %d %d\n", op, x, y);
if(op == 1) {
union1(x, y);
}
else {
if(find1(x) == find1(y))
fprintf(fout, "DA\n");
if(find1(x) != find1(y)) fprintf(fout, "NU\n");
}
}
fclose(fin);
fclose(fout);
return 0;
}