Pagini recente » Cod sursa (job #2250385) | Cod sursa (job #1216607) | macacu_22 | Cod sursa (job #170443) | Cod sursa (job #1704104)
#include <iostream>
#include <stdio.h>
#include <vector>
std::vector<int> parent, rank;
int FindSet(int a) {
if (a != parent[a]) {
parent[a] = FindSet(parent[a]);
}
return parent[a];
}
void Union(int a, int b) {
int aParent, bParent;
aParent = FindSet(a);
bParent = FindSet(b);
if (rank[aParent] > rank[bParent]) {
parent[bParent] = aParent;
} else if (rank[aParent] < rank[bParent]){
parent[aParent] = bParent;
} else {
parent[aParent] = bParent;
rank[bParent]++;
}
}
int main() {
FILE *in = fopen("disjoint.in", "r");
FILE *out = fopen("disjoint.out", "w");
int N, M;
fscanf(in, "%d %d", &N, &M);
for (int i = 0 ; i < N; i++) {
parent.push_back(i);
rank.push_back(i);
}
for (int i = 0; i < M; i++) {
int cod, x, y;
fscanf(in, "%d %d %d", &cod, &x, &y);
if (cod == 1) {
Union(x, y);
} else {
if (FindSet(x) == FindSet(y)) {
fprintf(out, "DA\n");
} else {
fprintf(out, "NU\n");
}
}
}
return 0;
}