8#include <unordered_map>
22int shortest_path(std::unordered_map<
int, std::vector<std::pair<int, int>>>& adj,
int n,
int start,
24 std::vector<int> dist(n, std::numeric_limits<int>::max());
26 std::priority_queue<std::pair<int, int>, std::vector<std::pair<int, int>>,
27 std::greater<std::pair<int, int>>>
29 q.push(std::make_pair(0, start));
33 int currentNode = q.top().second;
34 int currentDist = q.top().first;
37 if (currentDist > dist[currentNode]) {
40 for (std::pair<int, int>& edge : adj[currentNode]) {
41 if (currentDist + edge.second < dist[edge.first]) {
42 dist[edge.first] = currentDist + edge.second;
43 q.push(std::make_pair(dist[edge.first], edge.first));
48 return (dist[end] != std::numeric_limits<int>::max()) ? dist[end] : -1;