Pagini recente » Cod sursa (job #1754591) | Cod sursa (job #2214199) | Cod sursa (job #3155095) | Cod sursa (job #2181028) | Cod sursa (job #3151507)
#include <bits/stdc++.h>
using namespace std;
ifstream in("disjoint.in");
ofstream out("disjoint.out");
int n, m, p[100005], h[100005], op, x, y;
int Find(int x) {
int r = x;
while (r != p[r]) {
r = p[r];
}
while (x != r) {
int aux = p[x];
p[x] = r;
x = aux;
}
return r;
}
void Unite(int x, int y) {
int rx = Find(x);
int ry = Find(y);
if (h[rx] > h[ry]) {
p[ry] = rx;
} else {
p[rx] = ry;
}
if (h[rx] == h[ry])
h[ry]++;
}
int main()
{
in >> n >> m;
for (int i = 1; i <= n; i++)
p[i] = i;
while (m--) {
in >> op >> x >> y;
if (op == 1) {
Unite(x, y);
} else {
if (Find(x) == Find(y)) {
out << "DA\n";
} else {
out << "NU\n";
}
}
}
return 0;
}