Pagini recente » Cod sursa (job #1527482) | Cod sursa (job #273705) | Cod sursa (job #1712442) | Cod sursa (job #1516617) | Cod sursa (job #884312)
Cod sursa(job #884312)
#include <cstdio>
#include <cassert>
using namespace std;
const int MAX_N = 100005;
int N, Father[MAX_N];
int Find(int X) {
if (X == Father[X])
return X;
return (Father[X] = Find(Father[X]));
}
bool Merge(int X, int Y) {
X = Find(X); Y = Find(Y);
if (X != Y) {
Father[Y] = X;
return true;
}
return false;
}
void Initialize() {
for (int X = 1; X <= N; ++X)
Father[X] = X;
}
int main() {
assert(freopen("disjoint.in", "r", stdin));
assert(freopen("disjoint.out", "w", stdout));
int M; assert(scanf("%d %d", &N, &M) == 2);
Initialize();
for (; M > 0; --M) {
int Type, X, Y; assert(scanf("%d %d %d", &Type, &X, &Y) == 3);
if (Type == 1)
assert(Merge(X, Y));
else
printf("%s\n", (Find(X) == Find(Y) ? "DA" : "NU"));
}
return 0;
}