fork download
  1. #include <bits/stdc++.h>
  2. #include <vector>
  3. #include <queue>
  4. using namespace std;
  5. typedef pair<int,int> iPair;
  6. #define INF 0x3f3f3f3f
  7.  
  8.  
  9. void addEdge(vector<vector<pair<int,int>>>& adj, int i, int j, int w){
  10. adj[i].push_back(make_pair(j,w));
  11. adj[j].push_back(make_pair(i,w));
  12. }
  13.  
  14. void shortestPath(vector<vector<pair<int,int>>>& adj, int src){
  15. int n=adj.size();
  16. priority_queue<iPair, vector<iPair>, greater<iPair>> pq;
  17. vector<int> dist(n,INF);
  18. pq.push(make_pair(0,src));
  19. dist[src]=0;
  20. while(!pq.empty()){
  21. int v=pq.top().second;
  22. pq.pop();
  23. for(auto& i:adj[v]){
  24. int v1=i.first;
  25. int w=i.second;
  26. if(dist[v1]>dist[v]+w){
  27. dist[v1]=dist[v]+w;
  28. pq.push(make_pair(dist[v1],v1));
  29. }
  30. }
  31. }
  32. printf("dsitancejfkjd\n");
  33. for(int i=0;i<n;i++){
  34. printf("%d %d\n", i, dist[i]);
  35. }
  36. }
  37.  
  38. int main(){
  39. vector<vector<iPair>> adj(9);
  40. addEdge(adj, 0, 1, 4);
  41. addEdge(adj, 0, 7, 8);
  42. addEdge(adj, 1, 2, 8);
  43. addEdge(adj, 1, 7, 11);
  44. addEdge(adj, 2, 3, 7);
  45. addEdge(adj, 2, 8, 2);
  46. addEdge(adj, 2, 5, 4);
  47. addEdge(adj, 3, 4, 9);
  48. addEdge(adj, 3, 5, 14);
  49. addEdge(adj, 4, 5, 10);
  50. addEdge(adj, 5, 6, 2);
  51. addEdge(adj, 6, 7, 1);
  52. addEdge(adj, 6, 8, 6);
  53. addEdge(adj, 7, 8, 7);
  54. shortestPath(adj, 0);
  55. return 0;
  56. }
  57.  
Success #stdin #stdout 0s 5292KB
stdin
7
0
662573
10000
18898541
32385559
4
6
stdout
dsitancejfkjd
0 0
1 4
2 12
3 19
4 21
5 11
6 9
7 8
8 14