Anonymous
Решение Г. Сакурако и Чефира [закрыто]
Сообщение
Anonymous » 11 ноя 2024, 08:43
Задача: Г. Сакурако и Чефир
Задача: для каждого узла в дереве найти самый дальний узел, до которого можно добраться за некоторое количество подъемов
Вот мой код на C++:
Код: Выделить всё
#include
#include
using namespace std;
void down_to_leaves(int curr,
vector& list,
vector& dist,
vector& parent,
vector& visited) {
visited[curr] = true;
for (int child : list[curr]) {
if (visited[child]) {
continue;
}
parent[child] = curr;
down_to_leaves(child, list, dist, parent, visited);
dist[curr] = max(dist[child], dist[curr]);
}
dist[curr] += 1; // max(child_1, child_2, ...) + 1
}
int main() {
int t;
cin >> t;
for (int _ = 0; _ < t; _++) {
int n;
cin >> n;
vector list(n + 1);
vector parent(n + 1), dist(n + 1, -1);
vector visited(n + 1);
for (int i = 0; i < n - 1; i++) {
int u, v;
cin >> u >> v;
list[u].push_back(v);
list[v].push_back(u);
}
down_to_leaves(1, list, dist, parent, visited);
int q; cin >> q;
for (int i = 0; i < q; i++) {
int vertex, k, last = -1, ans = 0;
cin >> vertex >> k;
// climb up
for (int j = 0; j
Подробнее здесь: [url]https://stackoverflow.com/questions/79176508/solution-of-g-sakurako-and-chefir[/url]
1731303814
Anonymous
Задача: Г. Сакурако и Чефир Задача: для каждого узла в дереве найти самый дальний узел, до которого можно добраться за некоторое количество подъемов Вот мой код на C++: [code]#include #include using namespace std; void down_to_leaves(int curr, vector& list, vector& dist, vector& parent, vector& visited) { visited[curr] = true; for (int child : list[curr]) { if (visited[child]) { continue; } parent[child] = curr; down_to_leaves(child, list, dist, parent, visited); dist[curr] = max(dist[child], dist[curr]); } dist[curr] += 1; // max(child_1, child_2, ...) + 1 } int main() { int t; cin >> t; for (int _ = 0; _ < t; _++) { int n; cin >> n; vector list(n + 1); vector parent(n + 1), dist(n + 1, -1); vector visited(n + 1); for (int i = 0; i < n - 1; i++) { int u, v; cin >> u >> v; list[u].push_back(v); list[v].push_back(u); } down_to_leaves(1, list, dist, parent, visited); int q; cin >> q; for (int i = 0; i < q; i++) { int vertex, k, last = -1, ans = 0; cin >> vertex >> k; // climb up for (int j = 0; j Подробнее здесь: [url]https://stackoverflow.com/questions/79176508/solution-of-g-sakurako-and-chefir[/url]