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...