Maruf_Hasan

dijkstra by pair

Apr 7th, 2019 (edited)
160
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.46 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define M 101000
  4. #define INF 1e18+7
  5. #define ll long long
  6. #define pii pair<int,int>
  7. #define pll pair<ll,ll>
  8. #define mp make_pair
  9. vector<pll>adj[M];
  10. ll dis[M];
  11. ll parent[M];
  12. ll start;
  13. void dijkstra(ll source)
  14. {
  15. for(ll i=0;i<M;i++)
  16. {
  17. dis[i]=INF;
  18. parent[i]=-1;
  19. }
  20. priority_queue<pair<ll,ll>,vector<pair<ll,ll> >,greater<pair<ll,ll> > >pq;
  21. dis[source]=0;
  22. pq.push(mp(source,0));
  23. while(!pq.empty())
  24. {
  25. pll p=pq.top();
  26. pq.pop();
  27. // cout<<p.first<<endl;
  28. if(p.second>dis[p.first])
  29. continue;
  30. for(ll i=0;i<adj[p.first].size();i++)
  31. {
  32. pii v=adj[p.first][i];
  33. ll city=v.first;
  34. ll d=v.second;
  35. if(dis[city]>d+dis[p.first])
  36. {
  37. dis[city]=d+dis[p.first];
  38. pq.push(mp(city,dis[city]));
  39. parent[city]=p.first;
  40. }
  41. }
  42. }
  43. return;
  44. }
  45. void printpath(ll v)
  46. {
  47. if(v==start)
  48. {
  49. cout<<v<<" ";
  50. return;
  51. }
  52. printpath(parent[v]);
  53. cout<<v<<" ";
  54. }
  55. int main()
  56. {
  57. ll m,n;
  58. cin>>n>>m;
  59. while(m--)
  60. {
  61. int u,v,w;
  62. cin>>u>>v>>w;
  63. adj[u].push_back(mp(v,w));
  64. adj[v].push_back(mp(u,w));
  65. }
  66. start=1;
  67. dijkstra(1);
  68. if(dis[n]==INF)
  69. {
  70. cout<<-1<<endl;
  71. return 0;
  72. }
  73. printpath(n);
  74. cout<<endl;
  75. //cout<<dis[n]<<endl;
  76. return 0;
  77.  
  78. }
Add Comment
Please, Sign In to add comment