Submission #1184944

#TimeUsernameProblemLanguageResultExecution timeMemory
1184944epicci23Airplane (NOI23_airplane)C++20
0 / 100
48 ms19012 KiB
#include "bits/stdc++.h" #define int long long #define all(v) v.begin() , v.end() #define sz(a) (int)a.size() using namespace std; const int INF = 1e18; void _(){ int n, m; cin >> n >> m; int ar[n+5]; for(int i=1;i<=n;i++) cin >> ar[i]; vector<int> v[n+5]; priority_queue<array<int,2>,vector<array<int,2>>,greater<>> pq; for(int i=1;i<=m;i++){ int a,b; cin >> a >> b; v[a].push_back(b); v[b].push_back(a); } vector<int> dist(n+5,INF),dp(n+5,0); dist[1] = 0; pq.push({0, 1}); while(!pq.empty()){ int c = pq.top()[1]; int d = pq.top()[0]; pq.pop(); if(d > dist[c]) continue; for(int u : v[c]){ int xd = d + 1; if(dp[c] + 1 < ar[u]) xd += ar[u] - dp[c] - 1; if(xd < dist[u]){ dist[u] = xd; dp[u] = max(dp[c], ar[u]); pq.push({dist[u], u}); } } } vector<int> dist2(n+5,INF),dp2(n+5,0); dist2[n] = 0; pq.push({0, n}); while(!pq.empty()){ int c = pq.top()[1]; int d = pq.top()[0]; pq.pop(); if(d > dist2[c]) continue; for(int u : v[c]){ int xd = d + 1; if(dp2[c] + 1 < ar[u]) xd += ar[u] - dp2[c] - 1; if(xd < dist2[u]){ dist2[u] = xd; dp2[u] = max(dp2[c], ar[u]); pq.push({dist2[u], u}); } } } int ans = INF; for(int i=1;i<=n;i++){ ans = min(ans, dist[i] + dist2[i] + abs(dp[i] - dp2[i])); } cout << ans << '\n'; } int32_t main(){ cin.tie(0); ios::sync_with_stdio(0); int tc=1;//cin >> tc; while(tc--) _(); 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...