Submission #1303316

#TimeUsernameProblemLanguageResultExecution timeMemory
1303316KietJRailway Trip (JOI17_railway_trip)C++20
5 / 100
1162 ms13708 KiB
#include <bits/stdc++.h> using namespace std; #define f first #define s second #define pb(x) push_back(x) #define sz(x) (int) x.size() #define all(x) x.begin(), x.end() #define un(x) (x).erase(unique(all(x)), x.end()) typedef long long ll; typedef double db; typedef pair <int, int> ii; typedef pair <ll, ll> pll; typedef vector <ll> V; const int N = 2e3 + 10; // template <class T1, class Gz> void add(T1 &x, Gz y) { x += y; if (x < 0) x += mod; if (x >= mod) x -= mod; } template <class T1, class Gz> bool maximize(T1 &x, Gz y) { if (x < y) { x = y; return true; } return false; } template <class T1, class Gz> bool minimize(T1 &x, Gz y) { if (x > y) { x = y; return true; } return false; } int n, k, q; int a[N], dp[N][N]; vector <int> ed[N]; void dijsktra(int st, int p) { memset(dp[p], 0x3f, sizeof dp[p]); dp[p][st] = 0; priority_queue <ii, vector <ii>, greater <ii>> pq; pq.push({0, st}); while (sz(pq)) { ii X = pq.top(); pq.pop(); int dis = X.f, u = X.s; if (dp[p][u] != dis) continue; for(auto v: ed[u]) { if (minimize(dp[p][v], dp[p][u] + 1)) { pq.push({dp[p][v], v}); } } } } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> n >> k >> q; for(int i = 1; i <= n; i++) { cin >> a[i]; } for(int u = 1; u <= n; u++) { for(int i = 1; i <= a[u]; i++) { for(int v = u + 1; v <= n; v++) { if (i > a[v]) continue; ed[u].push_back(v); break; } for(int v = u - 1; v >= 1; v--) { if (i > a[v]) continue; ed[u].push_back(v); break; } } } for(int i = 1; i <= n; i++) { dijsktra(i, i); } for(int i = 1; i <= q; i++) { int u, v; cin >> u >> v; cout << dp[u][v] - 1 << endl; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...