#include <bits/stdc++.h>
using namespace std;
using ll = long long;
#define x first
#define y second
ll N, M, A[200005], D[200005];
vector<ll> G[200005];
int main(){
cin.tie(0) -> sync_with_stdio(0);
cin >> N >> M;
for(ll i = 1; i <= N; i++){
cin >> A[i];
}
for(ll i = 1; i <= M; i++){
ll u, v; cin >> u >> v;
G[u].push_back(v); G[v].push_back(u);
}
fill(D + 2, D + N + 1, 1e18);
priority_queue<array<ll, 5>> PQ;
PQ.push({0, 1, 0, 0, 0});
while(!PQ.empty()){
ll c = -PQ.top()[0], u = PQ.top()[1], m1 = PQ.top()[2], m2 = PQ.top()[3], k = PQ.top()[4]; PQ.pop();
if(D[u] < c) continue;
for(auto v : G[u]){
ll nm1 = max(m1, A[v] - k - 1), nm2 = max(m2, A[v] + k + 1);
if(D[v] > nm1 + nm2){
D[v] = nm1 + nm2;
PQ.push({-D[v], v, nm1, nm2, k + 1});
}
}
}
cout << D[N];
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |