Advertisement
Guest User

Untitled

a guest
Sep 17th, 2019
108
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.66 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. const int INF = 0x3f3f3f3f;
  5. const int N = 400 + 5;
  6.  
  7. int n, r, dp[N][N][N][2], t[N][2], ans[N][N][N][2], tam;
  8. int a, b, w, z, esc, q;
  9. vector<int> idx[2], aux;
  10.  
  11. int32_t main(){
  12.   ios_base::sync_with_stdio(0), cin.tie(0);
  13.   cin >> n >> r;
  14.   for(int i = 1; i <= n; i++) {
  15.     idx[0].push_back(i);
  16.     cin >> t[i][0];
  17.     aux.push_back(t[i][0]);
  18.   }
  19.  
  20.   sort(idx[0].begin(), idx[0].end(), [](int a, int b) {
  21.       if(t[a][0] == t[b][0]) return a < b;
  22.       return (t[a][0] < t[b][0]);
  23.   });
  24.  
  25.   idx[1] = idx[0];
  26.   reverse(idx[1].begin(), idx[1].end());
  27.  
  28.   sort(aux.begin(), aux.end());
  29.   aux.resize(unique(aux.begin(), aux.end()) - aux.begin());
  30.   tam = aux.size();
  31.   for(int i = 1; i <= n; i++) t[i][0] = lower_bound(aux.begin(), aux.end(), t[i][0]) - aux.begin() + 1;
  32.   for(int i = 1; i <= n; i++) t[i][1] = tam - t[i][0] + 1;
  33.  
  34.   memset(dp, 63, sizeof dp);
  35.   memset(ans, 63, sizeof ans);
  36.  
  37.   for(int i = 1; i <= n; i++)
  38.     for(int k = 0; k < 2; k++)
  39.       dp[i][i][0][k] = 0;
  40.  
  41.   for(int i = 1; i <= r; i++){
  42.     cin >> a >> b >> w;
  43.     for(int k = 0; k < 2; k++) dp[a][b][0][k] = dp[b][a][0][k] = w;
  44.   }
  45.  
  46.   for(int k = 0;  k+1 <= n; k++){
  47.     for(int i = 1; i <= n; i++){
  48.       for(int j = 1; j <= n; j++){
  49.         for(int p = 0; p < 2; p++){
  50.           int v = idx[p][k];
  51.           dp[i][j][k+1][p] = min(dp[i][j][k][p], dp[i][v][k][p] + dp[v][j][k][p]);
  52.           ans[i][j][t[v][p]][p] = min(ans[i][j][t[v][p]][p], dp[i][j][k+1][p]);
  53.         }
  54.       }
  55.     }
  56.   }
  57.  
  58.   cin >> q;
  59.   while(q--){
  60.     cin >> a >> b >> z >> esc;
  61.     cout << (ans[a][b][z][esc] == INF ? -1 : ans[a][b][z][esc]) << "\n";
  62.   }
  63. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement