19 [[nodiscard]]
const std::vector<std::uint64_t>&
distances() const noexcept {
return dist_; }
22 bool deletion =
false;
23 for (
const auto& e : batch.
updates) deletion |= !e.add;
26 else relax_from_updates(batch);
42 using Item = std::pair<std::uint64_t, VertexId>;
43 std::priority_queue<Item, std::vector<Item>, std::greater<Item>> queue;
44 for (
const auto& e : batch.updates) {
45 if (!e.add || e.src >= dist_.size() || e.dst >= dist_.size())
continue;
47 dist_[e.src] + 1 < dist_[e.dst]) {
48 dist_[e.dst] = dist_[e.src] + 1;
49 queue.push({dist_[e.dst], e.dst});
52 dist_[e.dst] + 1 < dist_[e.src]) {
53 dist_[e.src] = dist_[e.dst] + 1;
54 queue.push({dist_[e.src], e.src});
66 std::vector<std::uint64_t> dist_;
void apply(const UpdateBatch &batch)
BasicIncrementalSSSP(Graph &g, VertexId source)
const std::vector< std::uint64_t > & distances() const noexcept
void propagate_dijkstra(std::vector< std::uint64_t > &dist, std::priority_queue< std::pair< std::uint64_t, VertexId >, std::vector< std::pair< std::uint64_t, VertexId > >, std::greater< std::pair< std::uint64_t, VertexId > > > &queue, NeighborEnumerator &&enumerate)
constexpr std::uint64_t kDijkstraInf
void recompute_dijkstra(std::size_t vertex_count, VertexId source, std::vector< std::uint64_t > &dist, NeighborEnumerator &&enumerate)
void apply_updates(Graph &graph, const Batch &batch)
void for_each_neighbor(const Graph &graph, VertexId u, Fn &&fn)
constexpr bool is_directed(const Graph &graph)
constexpr std::size_t vertex_count(const Graph &graph)
std::vector< EdgeUpdate > updates