Submission #1150912

#TimeUsernameProblemLanguageResultExecution timeMemory
1150912horiseunPassport (JOI23_passport)C++20
40 / 100
2090 ms1114112 KiB
#include <bits/stdc++.h> using namespace std; #define int long long int n, q; vector<int> adj[2][200005]; void dijkstra(int strt, int dir, vector<int> &dist) { priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> pq; dist[strt] = 0; pq.emplace(0, strt); while (!pq.empty()) { int curr = pq.top().second, cdist = pq.top().first; pq.pop(); if (cdist > dist[curr]) continue; for (int i : adj[dir][curr]) { if (dist[curr] + 1 < dist[i]) { dist[i] = dist[curr] + 1; pq.emplace(dist[i], i); } } } } signed main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cin >> n; for (int i = 1; i <= n; i++) { int l, r; cin >> l >> r; for (int j = l; j <= r; j++) { if (j == i) continue; adj[0][i].push_back(j); adj[1][j].push_back(i); } } cin >> q; while (q--) { int x; cin >> x; vector<int> distx(n + 5, 2e9), dist1(n + 5, 2e9), distn(n + 5, 2e9); dijkstra(x, 0, distx); dijkstra(1, 1, dist1); dijkstra(n, 1, distn); int ans = 2e9; for (int i = 1; i <= n; i++) { ans = min(ans, distx[i] + dist1[i] + distn[i] - (i != 1 && i != n)); } cout << (ans == 2e9 ? -1 : ans) << "\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...
#Verdict Execution timeMemoryGrader output
Fetching results...