Pagini recente » Cod sursa (job #3157465) | Cod sursa (job #328971) | Cod sursa (job #2127453) | Cod sursa (job #304120) | Cod sursa (job #2977019)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int n, m;
int x, y, t;
int tati[100001];
int height[100001];
int find(int i) {
int rez = i;
vector<int> parcurs;
while (tati[rez] != rez) {
parcurs.push_back(rez);
rez = tati[rez];
}
for (int x : parcurs) {
tati[x] = rez;
}
return rez;
}
void unire(int i, int j) {
int r1 = find(i);
int r2 = find(j);
if (height[r1] > height[r2]) {
tati[r2] = r1;
} else {
tati[r1] = r2;
height[r2] = max(height[r2] + 1, height[r1]);
}
}
int main() {
fin >> n >> m;
for (int i = 1; i <= n; i++) {
tati[i] = i;
height[i] = 1;
}
for (int i = 0; i < m; i++) {
fin >> t >> x >> y;
if (t == 1) {
unire(x, y);
} else {
int r1 = find(x);
int r2 = find(y);
if (r1 == r2) {
fout << "DA\n";
} else {
fout << "NU\n";
}
}
}
}