fork download
  1. #include <bits/stdc++.h>
  2. #define endl "\n"
  3. using namespace std;
  4. #define int long long int
  5. int n, m;
  6. vector<vector<pair<int,int>>> g;
  7. vector<int> dist;
  8. const int MAXD = 1e17;
  9.  
  10. void dijkstra()
  11. {
  12. for(int i = 0; i <= n; ++i)
  13. {
  14. dist[i] = MAXD;
  15. }
  16.  
  17. priority_queue<pair<int,int>,
  18. vector<pair<int,int>>,
  19. greater<pair<int,int>> > pq;
  20. dist[1] = 0;
  21. pq.push({0,1});
  22. while(!pq.empty())
  23. {
  24. int u = pq.top().second;
  25. int d = pq.top().first;
  26. pq.pop();
  27. if(dist[u] < d) continue;
  28. for(auto e: g[u])
  29. {
  30. int v = e.first;
  31. int c = e.second;
  32. if(dist[v] <= c+d) continue;
  33. else
  34. {
  35. dist[v] = c+d;
  36. pq.push({dist[v], v});
  37. }
  38.  
  39. }
  40. }
  41.  
  42. }
  43.  
  44. int32_t main()
  45. {
  46. ios_base::sync_with_stdio(false);
  47. cin.tie(NULL);
  48. cin >> n >> m;
  49. g.resize(n+1);
  50. dist.resize(n+1);
  51. for(auto i = 0; i < m; ++i)
  52. {
  53. int u, v, c;
  54. cin >> u >> v >> c;
  55. g[u].push_back({v,c});
  56. }
  57. dijkstra();
  58. for(int i = 1; i <=n; ++i )
  59. {
  60. cout << dist[i] << " ";
  61. }
  62. }
Success #stdin #stdout 0.01s 5292KB
stdin
3 4
1 2 6
1 3 2
3 2 3
1 3 4
stdout
0 5 2