Pagini recente » Cod sursa (job #276723) | Cod sursa (job #1536986) | Cod sursa (job #2287959) | Cod sursa (job #2940526) | Cod sursa (job #3254882)
#include <bits/stdc++.h>
using namespace std;
int t[1'000'005], inalt[1'000'005];
int n, m;
int op, a, b;
int rad(int nod) {
if (nod == t[nod])
return nod;
return t[nod] = rad(t[nod]);
}
void reuniune() {
int ra = rad(a);
int rb = rad(b);
if (inalt[ra] > inalt[rb]) {
t[rb] = ra;
} else if (inalt[ra] < inalt[rb]) {
t[ra] = rb;
} else {
t[ra] = rb;
inalt[rb]++;
}
}
bool interogare() {
return rad(a) == rad(b);
}
int main() {
auto in = ifstream("disjoint.in");
auto out = ofstream("disjoint.out");
in >> n >> m;
for (int i = 1; i <= n; i++)
t[i] = i;
while (m--) {
in >> op >> a >> b;
if (op == 1) {
reuniune();
} else {
if (interogare())
out << "DA\n";
else
out << "NU\n";
}
}
}