Pagini recente » Cod sursa (job #1502739) | Cod sursa (job #3250483) | Cod sursa (job #819355) | Cod sursa (job #2440401) | Cod sursa (job #1164381)
#include <fstream>
using namespace std;
const int MAX = 100010;
int N, M;
int Dad[MAX], Cnt[MAX];
int Find(int X) {
int R = X;
while(R != Dad[R])
R = Dad[R];
while(X != R) {
int newX = Dad[X];
Dad[X] = R;
X = newX;
} return R;
}
void Merge(int X, int Y) {
if(Cnt[X] > Cnt[Y]) {
Dad[Y] = X;
} else
Dad[X] = Y;
}
int main() {
ifstream in("disjoint.in"); ofstream out("disjoint.out");
in >> N >> M;
for(int i = 1; i <= N; i++) {
Dad[i] = i;
Cnt[i] = i;
}
for(int i = 1, op, X, Y; i <= M; i++) {
in >> op >> X >> Y;
if(op == 1) {
Merge(Find(X), Find(Y));
} else {
if(Find(X) != Find(Y))
out << "NU\n";
else out << "DA\n";
}
} in.close(); out.close();
}