Advertisement
Guest User

email

a guest
Jul 27th, 2016
59
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.70 KB | None | 0 0
  1. #include <iostream>
  2. #include <bits/stdc++.h>
  3. #define rep(i , size) for(int i =0 ; i<size ; i++)
  4. #define lp(i , n) for(int i =0 ; i < n; i++ )
  5. #include <vector>
  6. using namespace std;
  7. struct edge
  8. {
  9. int from, to, w;
  10.  
  11. edge(int from, int to, int w): from(from), to(to), w(w) {}
  12.  
  13. bool operator < (const edge & e) const
  14. {
  15. return w > e.w;
  16. }
  17. };
  18. vector < vector<edge> > adjList;
  19. vector <int> dist;
  20. vector <int> res;
  21. int Dijkstra2(vector< vector< edge > > adjList, int src, int dest = -1);
  22. int main()
  23. {
  24. int cases ,counter=0,n,m,s,d;
  25. int from ,to,cost;
  26. cin>>cases;
  27. res.resize(cases);
  28. while(counter<cases)
  29. {
  30. cin >>n>>m;
  31. cin>>s>>d;
  32. adjList.clear() , adjList.resize(n) ;
  33. dist.clear(), dist.assign(n,6e5);
  34. lp(i,m)
  35. {
  36. cin >>from>>to>>cost;
  37. adjList[from].push_back(to).w=cost;
  38. adjList[to].push_back(from).w=cost;
  39. }
  40. res[counter]= Dijkstra2(adjList,s,d);
  41. counter++;
  42. }
  43. for(int i=1;i<=cases;i++)
  44. {
  45. cout<<"Case #"+i+":"+res[i-1];
  46.  
  47. }
  48. return 0;
  49. }
  50.  
  51. int Dijkstra2(std ::vector<std:: vector< edge > > adjList, int src, int dest = -1)
  52. {
  53. dist[src]=0;
  54. priority_queue<edge>q;
  55. q.push(edge(-1,src,0)) ;
  56. while (!q.empty())
  57. {
  58. edge e =q.top();
  59. q.pop();
  60. if(e.w>dist[e.to]) continue;
  61. rep(j,adjList[e.to].size())
  62. {
  63. edge k=adjList[e.to][j];
  64. if(dist[k.to]>dist[k.from]+k.w)
  65. {
  66. k.w=dist[k.to]=dist[k.from]+k.w;
  67. q.push(k);
  68. }
  69.  
  70. }
  71.  
  72. }
  73. return dest==-1? -1 : dist[dest];
  74. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement