제출 #1122535

#제출 시각아이디문제언어결과실행 시간메모리
1122535Trisanu_DasAirplane (NOI23_airplane)C++20
63 / 100
128 ms17412 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #define fi first #define se second #define pii pair<int,int> #define pb push_back const int mn=2e5+5; const int mod=1e9+7; int a[mn]; pii dp[mn]; vector<int> g[mn]; signed main(){ ios_base::sync_with_stdio(0); cin.tie(0); int n,m; cin>>n>>m; int ans=1e18; for (int i=1;i<=n;i++){ cin>>a[i]; dp[i]={1e18,1e18}; } for (int i=1;i<=m;i++){ int u,v; cin>>u>>v; g[u].pb(v); g[v].pb(u); } dp[1]={0,0}; priority_queue<pair<pii,int>,vector<pair<pii,int>>,greater<pair<pii,int>>> pq; pq.push({{0,0},1}); while (!pq.empty()){ int lb=pq.top().fi.fi-pq.top().fi.se; int ub=pq.top().fi.se; int id=pq.top().se; pq.pop(); pii cur={lb+ub,ub}; if (dp[id]!=cur) continue; for (int v:g[id]){ if (v==n) ans=min(ans,ub+max(lb,1ll)); else{ if (a[v]>ub){ int l=a[v]; int r=a[v]; if (l+r<dp[v].fi){ dp[v]={l+r,r}; pq.push({{l+r,r},v}); } } else{ int l=max(a[v],lb-1); int r=ub+1; if (l+r<dp[v].fi){ dp[v]={l+r,r}; pq.push({{l+r,r},v}); } } } } } cout<<ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...