Submission #1272548

#TimeUsernameProblemLanguageResultExecution timeMemory
1272548goulthenAirplane (NOI23_airplane)C++20
0 / 100
71 ms33308 KiB
#include <bits/stdc++.h>
using namespace std;

#define int long long
#define ll long long
#define rep(i,a,b) for (int i = a; i <= b; i++)
#define per(i,a,b) for (int i = a; i >= b; i--)
#define fi first
#define se second
#define pii pair<int,int>
#define pb push_back

const int MAXN = 2e5+10;
const int INF = 1e18 + 5;
const int MOD = 1e9+7;
vector<pii> g[MAXN][2];
int dist[MAXN][2],a[MAXN],n;
bool mk[MAXN];

void dijkstra(int u, int k) {
    rep(i,1,n) mk[i] = 0;
    priority_queue<pii,vector<pii>,greater<pii>> pq;
    pq.push({0,u});
    dist[u][k] = 0;

    while(!pq.empty()) {
        auto [d,cur] = pq.top();pq.pop();
        if (mk[cur]) continue;
        mk[cur] = 1;

        for (auto &[v,w] : g[cur][k]) {
            if (dist[v][k] <= d + w) continue;
            dist[v][k] = d+w;
            pq.push({d+w,v});
        }
    }
}

void solve() {
    int m;cin >> n >> m;
    rep(i,1,n) cin >> a[i], dist[i][0] = dist[i][1] = INF;  

    rep(i,1,m) {
        int u,v;cin >> u >> v;
        g[u][0].pb({v,max(1LL,a[v]-a[u])});
        g[v][0].pb({u,max(1LL,a[u]-a[v])});
        g[v][1].pb({u,max(1LL,a[u]-a[v])});
        g[u][1].pb({v,max(1LL,a[v]-a[u])});
    }

    dijkstra(1,0);
    dijkstra(n,1);

    int ans = INF;
    rep(i,1,n) ans = min(ans, dist[i][0] + dist[i][1] + max(0LL,abs(dist[i][0]-dist[i][1])-1));
    //rep(i,1,n) cout << i << ' ' << dist[i][0] << ' ' << dist[i][1] << '\n';
    cout << ans << '\n';
}

int32_t main() {
    ios_base::sync_with_stdio(0); cin.tie(nullptr);
    int tt = 1;
    //cin >> tt;

    while (tt--) solve();
    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...