Submission #1304354

#TimeUsernameProblemLanguageResultExecution timeMemory
1304354KietJRailway Trip (JOI17_railway_trip)C++20
5 / 100
2096 ms589824 KiB
#include<bits/stdc++.h>
using namespace std;

#define ll long long 
#define pii pair<int, int>
#define fi first
#define se second

const int N = 1e6 + 5;

int L[N], n, k, q;
vector<int> g[N];

int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  
  cin >> n >> k >> q;
  for (int i = 1; i <= n; i++) cin >> L[i];
  
  for (int j = 1; j <= k; j++) {
    vector<int> st;
    for (int i = 1; i <= n; i++) if (L[i] >= j) st.push_back(i);
    for (int t = 1; t < st.size(); t++) {
      int u = st[t - 1], v = st[t];
      g[u].push_back(v);
      g[v].push_back(u);
    }
  }
  
  while (q--) {
    int A, B;
    cin >> A >> B;
    if (A == B) {cout << "0\n"; continue;}
    vector<int> d(n + 1, -1);
    queue<int> q;
    d[A] = 0;
    q.push(A);
    while(!q.empty()){
      int u = q.front(); q.pop();
      if(u == B) break;
      for(int v: g[u]) if (d[v] == -1) {
          d[v] = d[u] + 1;
          q.push(v);
      }
    }
    if (d[B] == -1) cout << -1 << "\n";
    else cout<< max(0, d[B] - 1) <<"\n";
  }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...