Advertisement
theo830

robery

Apr 27th, 2019
109
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.63 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <queue>
  4. using namespace std;
  5. typedef pair<int, int> ii;
  6. typedef vector<int> vi;
  7. typedef vector<ii> vii;
  8. vector<vii> AdjList;
  9. vector<vii> AdjList1;
  10. priority_queue< ii, vector<ii>, greater<ii> > pq;
  11. vi dist;
  12. #define INF 1000000000
  13. void dijkstra1(int s){
  14. dist[s] = 0;
  15. pq.push(ii(0, s));
  16. while (!pq.empty()) {
  17. ii front = pq.top();
  18. pq.pop();
  19. int w = front.first;
  20. int u = front.second;
  21. if (w > dist[u]){
  22. continue;
  23. }
  24. for (int j = 0; j < AdjList1[u].size(); j++) {
  25. ii v = AdjList1[u][j];
  26. if (dist[u] + v.second < dist[v.first]) {
  27. dist[v.first] = dist[u] + v.second;
  28. pq.push(ii(dist[v.first], v.first));
  29. }
  30. }
  31. }
  32. }
  33. void dijkstra(int s){
  34. dist[s] = 0;
  35. pq.push(ii(0, s));
  36. while (!pq.empty()) {
  37. ii front = pq.top();
  38. pq.pop();
  39. int w = front.first;
  40. int u = front.second;
  41. if (w > dist[u]){
  42. continue;
  43. }
  44. for (int j = 0; j < AdjList[u].size(); j++) {
  45. ii v = AdjList[u][j];
  46. if (dist[u] + v.second < dist[v.first]) {
  47. dist[v.first] = dist[u] + v.second;
  48. pq.push(ii(dist[v.first], v.first));
  49. }
  50. }
  51. }
  52. }
  53. int main() {
  54. int V, E, s, a, b, w;
  55. int A;
  56. int q=INF;
  57. cin >> V >> E >> A;
  58. cin>>s;
  59. int y[V];
  60. AdjList.assign(V, vii());
  61. dist.assign(V, INF);
  62. for (int i = 0; i < E; i++) {
  63. cin >> a >> b >> w;
  64. AdjList[a].push_back(ii(b, w));
  65. AdjList1[b].push_back(ii(a, w));
  66. }
  67. dijkstra(A);
  68. for (int i = 0; i < V; i++){
  69. y[i] = y[i] + dist[i];
  70. }
  71. dijkstra(s);
  72. for (int i = 0; i < V; i++){
  73. y[i] = dist[i];
  74. }
  75. dijkstra1(A);
  76. for (int i = 0; i < V; i++){
  77. y[i] = y[i] + dist[i];
  78. }
  79. dijkstra1(s);
  80. for (int i = 0; i < V; i++){
  81. y[i] = dist[i];
  82. }
  83. for(int i=0;i<V;i++){
  84. if(q < y[i]){
  85. q = y[i];
  86. }
  87. }
  88. cout<<q<<endl;
  89. return 0;
  90. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement