Pagini recente » Cod sursa (job #1827995) | Cod sursa (job #1822119) | Cod sursa (job #1560243) | Cod sursa (job #1916185) | Cod sursa (job #2526806)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int n, m, cod, a, b;
int rang[100010], tt[100010];
int find(int x) {
int r;
for (r = x; tt[r] != r; r = tt[r]);
for (; tt[x] != x;) {
int y = tt[x];
tt[x] = r;
x = y;
}
}
void unite(int x, int y) {
if (rang[x] > rang[y])
tt[y] = x;
else
tt[x] = y;
if (rang[x] == rang[y])
rang[y]++;
}
int main() {
fin >> n >> m;
for (int i = 1; i <= n; i++) {
rang[i] = 1;
tt[i] = i;
}
for (int h = 1; h <= m; h++) {
fin >> cod >> a >> b;
if (cod == 1)
unite(find(a), find(b));
else {
if (find(a) == find(b))
fout << "DA\n";
else
fout << "NU\n";
}
}
return 0;
}