fork download
  1. #include <iostream>
  2. #include <queue>
  3.  
  4. using namespace std;
  5.  
  6. int dijkstra(vector<vector<pair<int, int>>>& graph, int src, int dst){
  7.  
  8. vector<int> distance(graph.size(), 987654321);
  9. distance[src] = 0;
  10.  
  11. priority_queue<pair<int, int>> pq;
  12. pq.push(make_pair(0, src));
  13.  
  14. while(!pq.empty()){
  15.  
  16. int now = pq.top().second;
  17. int dist = -pq.top().first;
  18. pq.pop();
  19.  
  20. if(distance[now] < dist){
  21. continue;
  22. }
  23.  
  24. for(auto e : graph[now]){
  25. int next = e.first;
  26. int cost = dist + e.second;
  27. if(distance[next] > cost){
  28. distance[next] = cost;
  29. pq.push(make_pair(-cost, next));
  30. }
  31. }
  32. }
  33.  
  34. return distance[dst];
  35.  
  36. }
  37.  
  38. int main() {
  39.  
  40. ios_base::sync_with_stdio(0);
  41. cin.tie(0);
  42.  
  43. int n, c, src, dst;
  44. cin >> n >> c >> src >> dst;
  45.  
  46. vector<vector<pair<int, int>>> graph(n + 1);
  47. for(int i = 0; i < c; i++){
  48. int u, v, c;
  49. cin >> u >> v >> c;
  50. graph[u].push_back(make_pair(v, c));
  51. graph[v].push_back(make_pair(u, c));
  52. }
  53.  
  54. cout << dijkstra(graph, src, dst);
  55.  
  56. return 0;
  57. }
Success #stdin #stdout 0.01s 5476KB
stdin
7 11 5 4
2 4 2
1 4 3
7 2 2
3 4 3
5 7 5
7 3 3
6 1 1
6 3 4
2 4 3
5 6 3
7 2 1
stdout
7