Submission #873522

#TimeUsernameProblemLanguageResultExecution timeMemory
873522dsyzAirplane (NOI23_airplane)C++17
100 / 100
245 ms31296 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; #define MAXN (1000005) int main() { ios_base::sync_with_stdio(false);cin.tie(0); ll N,M; cin>>N>>M; ll A[N]; ll maxA = 0; for(ll i = 0;i < N;i++){ cin>>A[i]; maxA = max(maxA,A[i]); } vector<ll> v[N]; for(ll i = 0;i < M;i++){ ll a,b; cin>>a>>b; a--; b--; v[a].push_back(b); v[b].push_back(a); } priority_queue<pair<ll,ll>,vector<pair<ll,ll> >,greater<pair<ll,ll> > > pq; ll start[N]; //either 0 or N - 1 ll dist[N]; memset(start,-1,sizeof(start)); memset(dist,-1,sizeof(dist)); dist[0] = 0; dist[N - 1] = 0; start[0] = 0; start[N - 1] = N - 1; pq.push({dist[0],0}); pq.push({dist[N - 1],N - 1}); while(!pq.empty()){ ll x = pq.top().second; ll d = pq.top().first; pq.pop(); if(d != dist[x]){ continue; } for(auto u : v[x]){ if(dist[u] == -1 || dist[u] > max(A[u],dist[x] + 1)){ dist[u] = max(A[u],dist[x] + 1); start[u] = start[x]; //started from node 0 or N - 1 pq.push({dist[u],u}); } } } ll ans = 1e18; for(ll x = 0;x < N;x++){ for(auto u : v[x]){ if(start[x] != start[u]){ //one started from node 0, another one from node N - 1 ll a = x; ll b = u; if(dist[a] > dist[b]) swap(a,b); //dist[a] is smaller ans = min(ans,dist[b] + max(A[b],dist[a] + 1)); } } } cout<<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...