fork download
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. typedef pair<int,int> ii ;
  4. vector<ii> adj[1001];
  5. int n, m , s;
  6. // dinh , canh , dinh bat dau
  7. void inp(){
  8. cin >> n >> m >> s;
  9. for(int i = 1 ; i <= m ; i++){
  10. int x,y,z;
  11. cin >> x >> y >> z;
  12. adj[x].push_back({y,z});
  13. adj[y].push_back({x,z});
  14. }
  15. }
  16. void Dijkstra(int s){
  17. priority_queue<ii,vector<ii>,greater<ii>> q;
  18. q.push({0,s});
  19. vector<int> d(n + 1 , 1e9);
  20. d[s] = 0 ;
  21. while(!q.empty()){
  22. ii t = q.top();
  23. q.pop();
  24. int dis = t.first ;
  25. int u = t.second;
  26. if(dis > d[u]) continue;
  27. for(ii e : adj[u]){
  28. int v = e.first;
  29. int w = e.second;
  30. if(d[v] > d[u] + w){
  31. d[v] = d[u] + w;
  32. q.push({d[v],v});
  33. }
  34. }
  35. }
  36. for(int i = 1 ; i <= n ; i++){
  37. cout << d[i] << " ";
  38. }
  39. }
  40. int main(){
  41. inp();
  42. Dijkstra(s);
  43. }
  44.  
Success #stdin #stdout 0.01s 5308KB
stdin
10 44 5
7 5 60
9 8 31
9 1 83
4 3 25
6 2 1
4 1 52
6 3 76
7 6 95
9 7 84
8 2 91
10 7 8
6 4 32
10 2 76
3 1 62
10 6 88
8 3 12
5 3 15
5 4 40
9 2 20
3 2 5
5 1 36
9 4 98
8 6 65
8 5 95
10 3 55
9 6 95

10 1 5
4 2 70
7 1 80
10 4 35
7 2 99
10 9 24
6 5 94
2 1 77
8 1 12
8 4 76
9 3 27
5 2 5
9 5 12
10 5 1
8 7 59
6 1 1
10 8 92
7 3 54
stdout
6 5 10 35 0 6 9 18 12 1