Pagini recente » Cod sursa (job #3225836) | Cod sursa (job #1666692) | Cod sursa (job #1134495) | monthly-2014/runda-1/clasament | Cod sursa (job #2707239)
#include <stdio.h>
#include <vector>
using namespace std;
int find_boss(int x, vector<int> & boss) {
if (x == boss[x]) {
return x;
}
boss[x] = find_boss(boss[x], boss);
return boss[x];
}
void merge(int x, int y, vector<int> & boss, vector<int> & max_dist_to_boss) {
int boss_x = find_boss(x, boss);
int boss_y = find_boss(y, boss);
if (max_dist_to_boss[x] < max_dist_to_boss[y]) {
boss[boss_x] = boss_y;
max_dist_to_boss[x]++;
} else {
boss[boss_y] = boss_x;
max_dist_to_boss[y]++;
}
}
int main() {
FILE * fin, * fout;
int n, m, op, x, y;
fin = fopen("disjoint.in", "r");
fout = fopen("disjoint.out", "w");
fscanf(fin, "%d%d", &n, &m);
vector<int> max_dist_to_boss(n, 0);
vector<int> boss(n);
for (int i = 0; i < n; i++) {
boss[i] = i;
}
for (int i = 0; i < m; i++) {
fscanf(fin, "%d%d%d", &op, &x, &y);
x--;
y--;
if (op == 1) {
merge(x, y, boss, max_dist_to_boss);
} else {
const char * ans =
(find_boss(x, boss) == find_boss(y, boss)) ?
"DA" :
"NU";
fprintf(fout, "%s\n", ans);
}
}
fclose(fin);
fclose(fout);
return 0;
}