제출 #1164195

#제출 시각아이디문제언어결과실행 시간메모리
1164195veehjAirplane (NOI23_airplane)C++20
10 / 100
1101 ms1114112 KiB
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef long double ld;
#define fi first
#define se second
#define pb push_back
#define sz(a) (ll) a.size()
#define all(x) (x).begin(), (x).end()
//[NOISG 2023 Finals] Airplane
ll n, m, mxa;
vector<ll> a;
vector<vector<ll>> dp, adj;

bool chk(ll A, ll B){
  if(0<=A && A<n && 0<=B && B<mxa+2) return 1;
  return 0;
}

void f() {
  cin >> n >> m;
  a.resize(n);
  for(auto& u : a) cin >> u;
  mxa=*max_element(all(a));
  dp.assign(n, vector<ll>(mxa+2, -1));
  for(ll i=0; i<n; i++){
    for(ll j=0; j<a[i]; j++) dp[i][j]=-2;
  }
  adj.assign(n, vector<ll>(0));
  for(ll i=0; i<m; i++){
    ll x, y; cin >> x >> y;
    x--; y--;
    adj[x].pb(y);
    adj[y].pb(x);
  }
  priority_queue<pair<ll, pair<ll, ll>>> q;
  q.push({0, {0, 0}});
  while(!q.empty()){
    ll nw=q.top().fi*(-1);
    pair<ll, ll> plc=q.top().se;
    q.pop();
    if(dp[plc.fi][plc.se]!=-1 && dp[plc.fi][plc.se]<=nw) continue;
    dp[plc.fi][plc.se]=nw;
    vector<ll> dy={1, -1};
    for(int i=0; i<2; i++){
      if(chk(plc.fi, plc.se+dy[i])){
        if(dp[plc.fi][plc.se+dy[i]]==-2) continue;
        if(dp[plc.fi][plc.se+dy[i]]==-1 || dp[plc.fi][plc.se+dy[i]]>nw+1){
          q.push({(-1)*(nw+1), {plc.fi, plc.se+dy[i]}});
        }
      }
    }
    dy={-1, 0, 1};
    for(auto& u : adj[plc.fi]){
      for(int i=0; i<3; i++){
        if(chk(u, plc.se+dy[i])){
          if(dp[u][plc.se+dy[i]]==-2) continue;
          if(dp[u][plc.se+dy[i]]==-1 || dp[u][plc.se+dy[i]]>nw+1){
            q.push({(-1)*(nw+1), {u, plc.se+dy[i]}});
          }
        }
      }
    }
  }
  cout << dp[n-1][0];
}

int main() {
  int tc=1; 
  // cin >> tc;
  for(int i=1; i<=tc; i++){
    // cout << '#' << i << endl;
    f();
    if(i!=tc) cout << endl;
  }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...