Naxocist

Cave

May 2nd, 2022 (edited)
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.33 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. using vi = vector<int>;
  5. using pi = pair<int, int>;
  6. using tiii = tuple<int, int, int>;
  7. using ll = long long;
  8.  
  9. const int N = 2005;
  10. vector<pi> adj[N], dist[N];
  11. pi par[N];
  12.  
  13.  
  14. int main() {
  15.     freopen("input.in", "r", stdin);
  16.    
  17.     int n, m, s, e; scanf("%d%d%d%d", &n, &s, &e, &m);
  18.    
  19.  
  20.     for(int i=0; i<m; ++i){
  21.         int u, v, w; scanf("%d%d%d", &u, &v, &w);
  22.         adj[u].emplace_back(v, w);
  23.     }
  24.  
  25.  
  26.     priority_queue<tiii, vector<tiii>, greater<tiii>> pq;
  27.     pq.emplace(0, s, 0);
  28.  
  29.     while(pq.size()){
  30.         int w, u, l;
  31.         tie(w, u, l) = pq.top(); pq.pop();
  32.  
  33.         for(pi x : adj[u]){
  34.             int v, vw;
  35.             tie(v, vw) = x;
  36.             bool chk = 1;
  37.             for(pi e : dist[v]){
  38.                 if(e.first <= w + vw && e.second <= l + 1) {
  39.                     chk = 0;
  40.                     break;
  41.                 }
  42.             }
  43.  
  44.             if(chk) {
  45.                 dist[v].emplace_back(w + vw, l + 1); // add possible path
  46.                 pq.emplace(w + vw, v, l + 1);
  47.             }
  48.         }
  49.     }
  50.  
  51.     int q; scanf("%d", &q);
  52.     while(q--){
  53.         int h; scanf("%d", &h);
  54.  
  55.         int ans = 1e9;
  56.         for(pi x : dist[e]) ans = min(ans, x.first + (x.second-1)*h);
  57.  
  58.         printf("%d ", ans);
  59.        
  60.     }
  61. }
  62.  
Add Comment
Please, Sign In to add comment