1.3 KiB
1.3 KiB
Задача 12 — Дейкстра на priority_queue (C++)
long long shortest_path(int n,
const std::vector<std::tuple<int,int,int>>& edges, // (u, v, w)
int src, int dst);
Требования:
- рёбра ориентированные, вес
w >= 0, self-loop допустим; вершины0..n-1; - вернуть длину кратчайшего пути
src -> dst(long long, веса суммируются до 10^9); - недостижимость →
-1;src == dst→0; - вес рёбер 0 допустим (условие применимости Дейкстры — неотрицательные веса);
- 100 000 вершин и 200 000 рёбер: быстрее 2 секунд. Значит нужна
std::priority_queue(O((V+E) log V)), а не O(V²) перебор минимума.
Подсказки по разбору (после сдачи): «ленивое» удаление устаревших записей из очереди
(if (d != dist[v]) continue;), почему нельзя Дейкстру с отрицательными рёбрами и когда
нужен Беллман–Форд.
Проверка: python3 grade.py 12. Критерий: все ok, сборка без предупреждений.