Submission #1242945

#TimeUsernameProblemLanguageResultExecution timeMemory
1242945Hamed_GhaffariPassport (JOI23_passport)C++20
0 / 100
0 ms584 KiB
#include <bits/stdc++.h> using namespace std; using pii = pair<int, int>; const int MXN = 2505, inf=1e7; int n, L[MXN], R[MXN]; vector<int> g[MXN]; int dis[2][MXN], val[MXN]; void bfs(int id, int v) { fill(dis[id]+1, dis[id]+n+1, inf); queue<int> q; dis[id][v] = 0; q.push(v); while(!q.empty()) { int v = q.front(); q.pop(); for(int u : g[v]) if(dis[id][u]>dis[id][v]+1) dis[id][u] = dis[id][v]+1, q.push(u); } } int D[MXN]; void SP() { vector<int> vec(n); iota(vec.begin(), vec.end(), 1); sort(vec.begin(), vec.end(), [&](int u, int v) { return val[u] > val[v]; }); fill(D+1, D+n+1, inf); queue<int> q; while(!q.empty() || !vec.empty()) { if(q.empty()) while(!vec.empty()) { int dd = val[vec.back()]; if(dd<D[vec.back()]) { D[vec.back()] = dd; q.push(vec.back()); vec.pop_back(); break; } vec.pop_back(); } if(q.empty()) break; while(!vec.empty()) { int dd = val[vec.back()]; if(dd<D[vec.back()] && dd<=D[q.front()]+1) { D[vec.back()] = dd; q.push(vec.back()); vec.pop_back(); } else break; } int v = q.front(); q.pop(); for(int u : g[v]) if(D[u]>D[v]+1) D[u] = D[v]+1, q.push(u); } } int32_t main() { cin.tie(0); cout.tie(0); ios_base::sync_with_stdio(0); cin >> n; assert(n<=2500); for(int i=1; i<=n; i++) { cin >> L[i] >> R[i]; for(int j=L[i]; j<=R[i]; j++) g[j].push_back(i); } bfs(0, 1); bfs(1, n); for(int i=1; i<=n; i++) { val[i] = dis[0][i] + dis[1][i] - (L[i]==1 && R[i]==n && i!=1 && i!=n); } SP(); int q; cin >> q; while(q--) { int x; cin >> x; cout << (D[x]>=inf ? -1 : D[x]) << '\n'; } 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...
#Verdict Execution timeMemoryGrader output
Fetching results...