Submission #1275321

#TimeUsernameProblemLanguageResultExecution timeMemory
1275321sh1ftAirplane (NOI23_airplane)C++17
0 / 100
1112 ms434260 KiB
#include <bits/stdc++.h>
#define ll long long

using namespace std;

const int mxN = 2e5+5;

int n, m;
ll a[mxN], ans = LLONG_MAX;
vector <int> adj[mxN];

map <pair <ll, ll>, ll> dis[mxN], vis[mxN];

int main() {
    cin >> n >> m;
    for (int i = 1; i <= n; i++) cin >> a[i];
    for (int i = 0, u, v; i < m; i++) cin >> u >> v, adj[u].emplace_back(v), adj[v].emplace_back(u);
    priority_queue <tuple <ll, ll, ll, int>> q;
    q.emplace(0, 0, 0, 1);
    for (int i = 2; i <= n; i++) dis[i][{0, 0}] = LLONG_MAX;
    while (!q.empty()) {
        auto [t, L, R, u] = q.top(); q.pop();
        if (u == n) { ans = min(ans, (-t) + R); continue; }
        for (auto v : adj[u]) {
            ll w = 1, l = L, r = R;
            if (a[v] > l) w = a[v] - l, l = a[v];
            r--;
            r = max(r, a[v]);
            if (!vis[v][{l, r}] || dis[v][{l, r}] > -t + w) q.emplace(-(dis[v][{l, r}] = -t + w), l, r, v), vis[v][{l, r}] = 1;
        }
    }
    cout << ans << '\n';
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...