Pagini recente » Cod sursa (job #604707) | Cod sursa (job #1533872) | Cod sursa (job #1455990) | Cod sursa (job #1828912) | Cod sursa (job #2308886)
#include <bits/stdc++.h>
using namespace std;
FILE *fin = freopen("disjoint.in", "r", stdin);
FILE *fout = freopen("disjoint.out", "w", stdout);
const int nMax = 1e5+2;
int n, m;
int parent[nMax];
int height[nMax];
int find(int node) {
while(parent[node] != node) {
parent[node] = parent[parent[node]];
node = parent[node];
}
return node;
}
void _union (int u, int v) {
int ru = find(u);
int rv = find(v);
if (height[ru] < height[rv])
parent[ru] = rv;
else if (height[rv] < height[ru])
parent[rv] = ru;
else {
parent[ru] = rv;
height[rv]++;
}
}
void _print(bool ok) {
if (ok)
printf("DA\n");
else printf("NU\n");
}
void initialize(int n) {
for (int i = 1; i <= n; ++ i)
parent[i] = i;
}
int main() {
scanf ("%d%d", &n, &m);
initialize(n);
for (; m > 0; --m) {
int qType, a, b;
scanf("%d%d%d", &qType, &a, &b);
if (qType == 1)
_union(a, b);
else
_print(find(a) == find(b));
}
return 0;
}