Advertisement
theo830

ληστεία 2017-2018

Apr 27th, 2019
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.76 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 1000005
  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. long long q=INF;
  57. cin >> V >> E >> A;
  58. cin>>s;
  59. int y[V];
  60. AdjList.assign(V, vii());
  61. AdjList1.assign(V,vii());
  62. dist.assign(V, INF);
  63. for (int i = 0; i < E; i++) {
  64. cin >> a >> b >> w;
  65. AdjList[a].push_back(ii(b, w));
  66. AdjList1[b].push_back(ii(a, w));
  67. }
  68. dijkstra(A);
  69. for (int i = 0; i < V; i++){
  70. y[i] = y[i] + dist[i];
  71. }
  72. dist.assign(V, INF);
  73. dijkstra(s);
  74. for (int i = 0; i < V; i++){
  75. y[i] = dist[i];
  76. }
  77. dist.assign(V, INF);
  78. dijkstra1(A);
  79. for (int i = 0; i < V; i++){
  80. y[i] = y[i] + dist[i];
  81. }
  82. dist.assign(V, INF);
  83. dijkstra1(s);
  84. for (int i = 0; i < V; i++){
  85. y[i] = dist[i];
  86. }
  87. for(int i=0;i<V;i++){
  88. if(q < y[i]){
  89. q = y[i];
  90. }
  91. }
  92. cout<<q<<endl;
  93. return 0;
  94. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement