Submission #827059

#TimeUsernameProblemLanguageResultExecution timeMemory
827059HanksburgerPassport (JOI23_passport)C++17
40 / 100
2111 ms965952 KiB
#include <bits/stdc++.h> using namespace std; int dist[2505][2505], rdist[2505][2505], ans[200005]; vector<int> adj[200005], radj[200005]; queue<int> q; int main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n, m, val; cin >> n; for (int i=1; i<=n; i++) { int l, r; cin >> l >> r; for (int j=l; j<=r; j++) { adj[i].push_back(j); radj[j].push_back(i); } } cin >> m >> val; for (int i=1; i<=n; i++) { if (i!=1 && i!=n && i!=val) continue; for (int j=1; j<=n; j++) dist[i][j]=1e8; dist[i][i]=0; q.push(i); while (!q.empty()) { int u=q.front(); q.pop(); for (int v:adj[u]) { if (dist[i][u]+1<dist[i][v]) { dist[i][v]=dist[i][u]+1; q.push(v); } } } for (int j=1; j<=n; j++) rdist[i][j]=1e8; rdist[i][i]=0; q.push(i); while (!q.empty()) { int u=q.front(); q.pop(); for (int v:radj[u]) { if (rdist[i][u]+1<rdist[i][v]) { rdist[i][v]=rdist[i][u]+1; q.push(v); } } } } for (int i=1; i<=n; i++) { if (i!=val) continue; ans[i]=min(dist[i][1]+dist[1][n], dist[i][n]+dist[n][1]); for (int j=2; j<n; j++) ans[i]=min(ans[i], dist[i][j]+rdist[1][j]+rdist[n][j]-1); } if (ans[val]<5e7) cout << ans[val]; else cout << -1; }
#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...