Trying to solve problem Ace Race in codeforces
Given a racetrack with N nodes starting from 1 to N
For a normal node, x, it is possible to move to x - 1 or x + 1 in 2 seconds (for x = 1 then only x = 2 is possible to travel and similarly with x = N only x = N - 1)
The racetrack contains some powerup Узлы которого могут быть узлом для прыжков или узлом повышения скорости < /p>
узлы повышения скорости, позволяющие перемещаться между узлами за 1 секунду в течение K, в то время как узлы Prump Pad дают вам возможность перемещаться в определенную ячейку V в течение 1 секунды. < /p>
повышение скорости скорости не складывается; Вместо этого, многочисленные повышения скорости могут быть активными в одно и то же время, что означает, что вы можете сохранить максимум между оставшейся продолжительностью повышения скорости и текущим повышением скорости узла.
Кроме того, активация накладки для прыжков деактивирует любой ток. Когда дело доходит до узела скорости повышения с индексом j, постройте ребра от j до всех ячеек g в [j - k, j + k] с весом, равным G - J, за исключением узла g = j i пропускаю его. Таким образом, я могу расслабить узлы, которые связаны с скоростной ячейкой непосредственно непосредственно. Код: < /p>
Моя реализация алгоритма Dijkstra < /p>
#include
#include
int dijkstra(int n,
std::unordered_map& adj_list){
std::unordered_map times;
times[1] = 0;
std::unordered_set explored = {1};
int calc_time;
int i = 1;
while(i < n){
for(const auto& [neighbor, weight]: adj_list){
if(explored.count(neighbor)){
continue;
}
calc_time = times + weight;
if(!times.count(neighbor)){
times[neighbor] = calc_time;
} else {
times[neighbor] = std::min(times[neighbor], calc_time);
}
}
times.erase(i);
int min_val = -1;
int min_key = 0;
for(const auto& [key, value]: times){
if(min_val == -1){
min_val = value;
min_key = key;
continue;
}
if(value < min_val){
min_val = value;
min_key = key;
}
if(min_val == i + 1){
break;
}
}
i = min_key;
explored.insert(i);
}
return times[n];
}
< /code>
Обработка ввода и создание Adj_list < /p>
#include
int main() {
int n;
std::cin >> n;
std::unordered_map adj_list;
for(int i = 1; i 1) adj_list = 2;
if(i < n) adj_list[i + 1] = 2;
}
char cur_cell;
int value;
for(int i = 1; i > cur_cell;
if(cur_cell == 'S'){
std::cin >> value;
int start = std::max(1, i - value);
int end = std::min(n, i + value);
for(int j = start; j > value;
adj_list[value] = 1;
}
}
int answer = dijkstra(n, adj_list);
std::cout
Подробнее здесь: https://stackoverflow.com/questions/797 ... oost-cells
Алгоритм Dijkstra с ячейками повышения скорости ⇐ C++
Программы на C++. Форум разработчиков
-
Anonymous
1753400672
Anonymous
Trying to solve problem Ace Race in codeforces
Given a racetrack with N nodes starting from 1 to N
For a normal node, x, it is possible to move to x - 1 or x + 1 in 2 seconds (for x = 1 then only x = 2 is possible to travel and similarly with x = N only x = N - 1)
The racetrack contains some powerup Узлы которого могут быть узлом для прыжков или узлом повышения скорости < /p>
узлы повышения скорости, позволяющие перемещаться между узлами за 1 секунду в течение K, в то время как узлы Prump Pad дают вам возможность перемещаться в определенную ячейку V в течение 1 секунды. < /p>
повышение скорости скорости не складывается; Вместо этого, многочисленные повышения скорости могут быть активными в одно и то же время, что означает, что вы можете сохранить максимум между оставшейся продолжительностью повышения скорости и текущим повышением скорости узла.
Кроме того, активация накладки для прыжков деактивирует любой ток. Когда дело доходит до узела скорости повышения с индексом j, постройте ребра от j до всех ячеек g в [j - k, j + k] с весом, равным G - J, за исключением узла g = j i пропускаю его. Таким образом, я могу расслабить узлы, которые связаны с скоростной ячейкой непосредственно непосредственно. Код: < /p>
Моя реализация алгоритма Dijkstra < /p>
#include
#include
int dijkstra(int n,
std::unordered_map& adj_list){
std::unordered_map times;
times[1] = 0;
std::unordered_set explored = {1};
int calc_time;
int i = 1;
while(i < n){
for(const auto& [neighbor, weight]: adj_list[i]){
if(explored.count(neighbor)){
continue;
}
calc_time = times[i] + weight;
if(!times.count(neighbor)){
times[neighbor] = calc_time;
} else {
times[neighbor] = std::min(times[neighbor], calc_time);
}
}
times.erase(i);
int min_val = -1;
int min_key = 0;
for(const auto& [key, value]: times){
if(min_val == -1){
min_val = value;
min_key = key;
continue;
}
if(value < min_val){
min_val = value;
min_key = key;
}
if(min_val == i + 1){
break;
}
}
i = min_key;
explored.insert(i);
}
return times[n];
}
< /code>
Обработка ввода и создание Adj_list < /p>
#include
int main() {
int n;
std::cin >> n;
std::unordered_map adj_list;
for(int i = 1; i 1) adj_list[i][i - 1] = 2;
if(i < n) adj_list[i][i + 1] = 2;
}
char cur_cell;
int value;
for(int i = 1; i > cur_cell;
if(cur_cell == 'S'){
std::cin >> value;
int start = std::max(1, i - value);
int end = std::min(n, i + value);
for(int j = start; j > value;
adj_list[i][value] = 1;
}
}
int answer = dijkstra(n, adj_list);
std::cout
Подробнее здесь: [url]https://stackoverflow.com/questions/79712772/dijkstras-algorithm-with-speed-boost-cells[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия