Pagini recente » Cod sursa (job #213998) | Cod sursa (job #1639020) | Cod sursa (job #2350936) | Cod sursa (job #3269180) | Cod sursa (job #1118634)
#include <cstdio>
using namespace std;
#define MAX 100001
int n, parent[MAX], grad[MAX];
int gaseste(int x) {
//find root
int r = x;
while (parent[r] != r) r=parent[r];
//compress everything
while (parent[x] != x) {
int aux=parent[x];
parent[x]= r;
x = aux;
}
return r;
}
void unite(int a, int b) {
if (grad[a] > grad[b])
parent[b]=a;
else
parent[a]=b;
if (grad[a] == grad[b])
grad[b]++;
}
int main() {
freopen("disjoint.in", "r", stdin);
freopen("disjoint.out", "w", stdout);
int m;
scanf("%d %d", &n, &m);
for (int i = 1; i <= n; i++) {
parent[i]=i;
grad[i]=1;
}
for (int i = 1; i <= m; i++) {
int x, a, b;
scanf("%d %d %d", &x, &a, &b);
if (x == 1) {
unite(gaseste(a), gaseste(b));
} else {
if (gaseste(a) == gaseste(b)) {
printf("DA\n");
} else {
printf("NU\n");
}
}
}
return 0;
}