Advertisement
MaxObznyi

Problem E

May 14th, 2022
177
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.06 KB | None | 0 0
  1. #include <iostream>
  2. #include <queue>
  3. #include <algorithm>
  4.  
  5. using namespace std;
  6.  
  7. struct road {
  8. int u, t, w;
  9. };
  10.  
  11. vector<road> g[N];
  12.  
  13. void dijkstra(int x) {
  14. for (int i = 2; i <= n; i++)
  15. dist[i] = INF;
  16. priority_queue<cell, vector<cell>, CellComparator> q;///{dist[v], v}
  17. for (int i = 1; i <= n; i++)
  18. q.push({dist[i], i});
  19.  
  20. while (!q.empty()) {
  21. int d = q.top().dist;
  22. int v = q.top().v;
  23. q.pop();
  24.  
  25. if (d != dist[v])///= d > dist[v], so we already used v before
  26. continue;
  27.  
  28. for (auto [u, t, w] : g[v])
  29. if (dist[u] > dist[v] + t && w >= x) {
  30. dist[u] = dist[v] + t;
  31. q.push({dist[u], u});
  32. ///different pairs for the same u
  33. }
  34. }
  35. }
  36.  
  37. int main()
  38. {
  39. ///read
  40. ...
  41.  
  42.  
  43. int l = 0, r = 1'000'000'001;
  44. while (l < r - 1) {
  45. int m = (l + r) / 2;
  46. if (dijkstra(m) <= 525600)
  47. l = m;
  48. else
  49. r = m;
  50. }
  51. cout << l;
  52. return 0;
  53. }
  54.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement