Pagini recente » Cod sursa (job #1604374) | Cod sursa (job #785722) | Cod sursa (job #1163413) | Cod sursa (job #2649177) | Cod sursa (job #2636100)
#include <stdio.h>
#define NMAX 100005
FILE* fin, * fout;
int M[NMAX], n, m;
void compresie(int x, int r) {
while (x != r) {
int urm = M[x];
M[x] = r;
x = urm;
}
}
int radacina(int x) {
int y = x;
while (M[x] != x)
x = M[x];
compresie(y, x);
return x;
}
void reuniune(int x, int y) {
int r1 = radacina(x), r2 = radacina(y);
M[r1] = r2;
}
bool aceeasiMultime(int x, int y) {
int r1 = radacina(x), r2 = radacina(y);
return (r1 == r2);
}
int main() {
fin = fopen("disjoint.in", "r");
fout = fopen("disjoint.out", "w");
fscanf(fin, "%i %i", &n, &m);
for (int i = 1;i <= n;++i)
M[i] = i;
while (m--) {
int t, x, y;
fscanf(fin, "%i %i %i", &t, &x, &y);
if (t == 1) {
reuniune(x, y);
}
else {
if (aceeasiMultime(x, y))
printf("DA\n");
else printf("NU\n");
}
}
return 0;
}