Pagini recente » Cod sursa (job #2943082) | Cod sursa (job #761933) | Cod sursa (job #2202951) | Cod sursa (job #495465) | Cod sursa (job #1607771)
#include <stdio.h>
#define N_MAX 100003
#define UNIRE 1
#define COMPARA 2
int n, m;
int tata[N_MAX];
int h[N_MAX];
bool unire(int, int, int);
int findDad(int);
int main()
{
freopen("disjoint.in", "r", stdin);
freopen("disjoint.out", "w", stdout);
int c, x, y;
bool rez;
scanf("%d%d", &n, &m);
for (int i = 1; i <= n; ++i) tata[i] = i;
for (int i = 1; i <= m; ++i){
scanf("%d%d%d", &c, &x, &y);
switch (c){
case UNIRE : unire(x, y, UNIRE); break;
case COMPARA : rez = unire(x, y, COMPARA);
if (rez) printf("DA\n");
else printf("NU\n");
break;
}
}
return 0;
}
bool unire(int x, int y, int c){
int a = findDad(x);
int b = findDad(y);
if (a == b)
return true;
else {
if (c == COMPARA) return false;
if (h[a] > h[b]) tata[b] = a;
else if (h[a] < h[b]) tata[a] = b;
else tata[a] = b, h[a]++;
}
return true;
}
int findDad(int x){
int r;
if (tata[x] != x){
r = findDad(tata[x]);
tata[x] = r;
}
return tata[x];
}