18 std::priority_queue<std::pair<std::uint64_t, VertexId>,
19 std::vector<std::pair<std::uint64_t, VertexId>>,
20 std::greater<std::pair<std::uint64_t, VertexId>>>& queue,
21 NeighborEnumerator&& enumerate) {
22 while (!queue.empty()) {
23 const auto [distance, u] = queue.top();
25 if (u >= dist.size() || distance != dist[u])
continue;
26 enumerate(u, [&](
VertexId v, std::uint64_t weight) {
27 if (v >= dist.size() || weight >
kDijkstraInf - distance)
return;
28 const auto candidate = distance + weight;
29 if (candidate < dist[v]) {
31 queue.push({candidate, v});
40 std::vector<std::uint64_t>& dist,
41 NeighborEnumerator&& enumerate) {
44 using Item = std::pair<std::uint64_t, VertexId>;
45 std::priority_queue<Item, std::vector<Item>, std::greater<Item>> queue;
47 queue.push({0, source});