Advertisement
Guest User

Untitled

a guest
May 26th, 2018
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.10 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. #define pb push_back
  5. #define ll long long
  6. #define ld long double
  7. #define F first
  8. #define S second
  9.  
  10. const ll inf = 2e12;
  11.  
  12.  
  13. int main() {
  14. #ifdef LOCAL
  15.     freopen("input.txt", "r", stdin);
  16.     freopen("output.txt", "w", stdout);
  17. #else
  18.     freopen("phoneline.in", "r", stdin);
  19.     freopen("phoneline.out", "w", stdout);
  20. #endif
  21.     ios_base::sync_with_stdio(0);
  22.     cin.tie(0);
  23.     cout.tie(0);
  24.     ll n, m, k;
  25.     cin >> n >> m >> k;
  26.     vector <pair <ll ,ll > > g[n];
  27.     vector <ll> rib;
  28.     for (ll i = 0; i < m; i++){
  29.         ll x, y, z;
  30.         cin >> x >> y >> z;
  31.         x --;
  32.         y --;
  33.         g[x].pb({y, z});
  34.         g[y].pb({x, z});
  35.         rib.pb(z);
  36.     }
  37.     rib.pb(0);
  38.     sort (rib.begin() , rib.end());
  39.     ll l = 0, r = m;
  40.     while (l + 1 < r){
  41.         ll mid = (l + r) / 2;
  42.         priority_queue <pair <ll ,ll> > q;
  43.         q.push({0 , 0});
  44.         vector <ll> d(n, inf);
  45.         d[0] = 0;
  46.         while (!q.empty()){
  47.             ll rast = -q.top().F , v = q.top().S;
  48.             q.pop();
  49.             if (rast > d[v])continue;
  50.             for (auto to : g[v]){
  51.                 if (d[v] + (to.S > mid) < d[to.F]){
  52.                     d[to.F] = d[v] + (to.S > mid);
  53.                     q.push({-d[to.F] , to.F});
  54.                 }
  55.             }
  56.         }
  57.         if (d[n - 1] > k){
  58.             l = mid + 1;
  59.         }
  60.         else{
  61.             r = mid;
  62.         }
  63.     }
  64.     for (ll i = l; i <= r; i++){
  65.         priority_queue <pair <ll ,ll> > q;
  66.         q.push({0 , 0});
  67.         vector <ll> d(n, inf);
  68.         d[0] = 0;
  69.         while (!q.empty()){
  70.             ll rast = -q.top().F , v = q.top().S;
  71.             q.pop();
  72.             if (rast > d[v])continue;
  73.             for (auto to : g[v]){
  74.                 if (d[v] + (to.S > i) < d[to.F]){
  75.                     d[to.F] = d[v] + (to.S > i);
  76.                     q.push({-d[to.F] , to.F});
  77.                 }
  78.             }
  79.         }
  80.         if (d[n - 1] <= k){
  81.             cout << i << endl;
  82.             return 0;
  83.         }
  84.     }
  85.     cout << "-1" << endl;
  86. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement