Pagini recente » Cod sursa (job #19346) | Cod sursa (job #2619299) | Cod sursa (job #2941532) | Cod sursa (job #2478176) | Cod sursa (job #1201406)
#include <fstream>
using namespace std;
const int MAX_N = 100002;
int N, M;
int H[MAX_N], F[MAX_N];
inline int find(int x) {
int R = x;
while (R != F[R])
R = F[R];
while (F[x] != x) {
int temp = F[x];
F[x] = R;
x = temp;
}
return R;
}
inline void unite(int x, int y) {
if (H[x] > H[y])
F[y] = x;
else F[x] = y;
if (H[x] == H[y])
++H[y];
}
int main() {
ifstream f("disjoint.in");
ofstream g("disjoint.out");
f >> N >> M;
for (int i = 1; i <= N; ++i)
F[i] = i, H[i] = 1;
for (int i = 1, t, x, y; i <= M; ++i) {
f >> t >> x >> y;
if (t == 1)
unite(F[x], F[y]);
else if (find(F[x]) == find(F[y]))
g << "DA\n";
else g << "NU\n";
}
f.close();
g.close();
return 0;
}