fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. using ll = long long;
  5.  
  6. const int maxn = 100001;
  7. int n, m, s, t;
  8. vector<pair<int, int>> adj[maxn];
  9.  
  10. void nhap(){
  11. cin >> n >> m >> s;
  12. for(int i = 0; i < m; i++){
  13. int x, y, w; cin >> x >> y >> w;
  14. adj[x].push_back({y, w});
  15. //adj[y].push_back({x, w});
  16. }
  17. }
  18.  
  19. const int INF = 1e9;
  20. int pre[maxn];
  21.  
  22. void dijkstra(int s){
  23. //Mang luu khoang cach duong di
  24. vector<ll> d(n + 1, INF);
  25. d[s] = 0;
  26. priority_queue<pair<int, int>, vector<pair<int, int>> , greater<pair<int,int>>> Q;
  27. //{khoang cach, dinh}
  28. Q.push({0, s});
  29. while(!Q.empty()){
  30. //Chọn ra đỉnh có khoảng cách từ s nhỏ nhất
  31. pair<int, int> top = Q.top(); Q.pop();
  32. int u = top.second;
  33. int kc = top.first;
  34. if(kc > d[u]) continue;
  35. //Relaxtion : Thông qua đỉnh u đã biết khoảng cách ngắn nhất tính từ S, cập
  36. //nhật khoảng cách với các đỉnh kề với u
  37. for(auto it : adj[u]){
  38. int v = it.first;
  39. int w = it.second;
  40. if(d[v] > d[u] + w){
  41. d[v] = d[u] + w;
  42. Q.push({d[v], v});
  43. }
  44. }
  45. }
  46. for(int i = 1; i <= n; i++){
  47. cout << d[i] << ' ';
  48. }
  49. }
  50.  
  51.  
  52. int main(){
  53. ios::sync_with_stdio(false);
  54. cin.tie(nullptr);
  55. nhap();
  56. dijkstra(s);
  57. }
Success #stdin #stdout 0.01s 5944KB
stdin
Standard input is empty
stdout
Standard output is empty