Pagini recente » Cod sursa (job #1402441) | Cod sursa (job #2890537) | Cod sursa (job #1854758) | Cod sursa (job #2068888) | Cod sursa (job #1300258)
#include <iostream>
#include <fstream>
#define nmax 100005
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int n, m;
int R[nmax], NR[nmax];
void initialize() {
int i;
for (i = 1; i <= n; i++) {
R[i] = i;
NR[i] = i;
}
}
int root(int x) {
if (R[x] == x)
return x;
return root(R[x]);
}
void join(int x, int y) {
int rx, ry;
rx = root(x);
ry = root(y);
if (NR[rx] >= NR[ry]) {
NR[rx] += NR[ry];
R[ry] = rx;
} else {
NR[ry] += NR[rx];
R[rx] = ry;
}
}
void solve() {
int i, op, x, y;
fin >> n >> m;
initialize();
for (i = 1; i <= m; i++) {
fin >> op >> x >> y;
if (op == 1)
join(x, y);
else {
if (root(x) == root(y))
fout << "DA\n";
else
fout << "NU\n";
}
}
}
int main() {
solve();
fin.close();
fout.close();
return 0;
}