Advertisement
Guest User

Untitled

a guest
Feb 19th, 2020
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.65 KB | None | 0 0
  1. #include <vector>
  2. #include <algorithm>
  3. #include <iostream>
  4. #include <set>
  5.  
  6. #define int long long
  7. using namespace std;
  8.  
  9. struct edge {
  10.     int to, w;
  11.  
  12.     edge(int to, int w) : to(to), w(w) {};
  13. };
  14.  
  15. int n, m, s, f;
  16. vector<vector<edge>> g;
  17. vector<vector<int>> lim;
  18. vector<int> dist;
  19. const int INF = 1e9;
  20. const int TL = 24 * 60;
  21. const int VEHICLE = 3 * 1e6;
  22.  
  23. bool djikstra(int limit) {
  24.     dist.assign(n, INF);
  25.     dist[s] = 0;
  26.     set<pair<int, int>> q;
  27.     for (int v = 0; v < n; ++v) {
  28.         q.insert({dist[v], v});
  29.     }
  30.     while (!q.empty()) {
  31.         int now = (*q.begin()).second;
  32.         q.erase(q.begin());
  33.         for (auto u : g[now]) {
  34.             if (lim[now][u.to] >= limit && dist[u.to] > dist[now] + u.w) {
  35.                 q.erase({dist[u.to], u.to});
  36.                 dist[u.to] = dist[now] + u.w;
  37.                 q.insert({dist[u.to], u.to});
  38.             }
  39.         }
  40.     }
  41.     return dist[f] <= TL;
  42. }
  43.  
  44. signed main() {
  45. //    freopen("input.txt", "r", stdin);
  46. //    freopen("output.txt", "w", stdout);
  47.     cin >> n >> m;
  48.     if (n == 1) {
  49.         cout << 10 * (int) 1e6;
  50.         return 0;
  51.     }
  52.     g.resize(n);
  53.     lim.assign(n, vector<int>(n, INF));
  54.     for (int _ = 0; _ < m; ++_) {
  55.         int a, b, w_, l;
  56.         cin >> a >> b >> w_ >> l;
  57.         a--, b--;
  58.         g[a].emplace_back(b, w_);
  59.         g[b].emplace_back(a, w_);
  60.         lim[a][b] = l;
  61.     }
  62.     s = 0, f = n - 1;
  63.     int l = 0, r = INF;
  64.     while (l + 1 < r) {
  65.         m = (l + r) / 2;
  66.         if (djikstra(VEHICLE + 100 * m)) {
  67.             l = m;
  68.         } else {
  69.             r = m;
  70.         }
  71.     }
  72.     cout << l;
  73.     return 0;
  74. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement