Submission #1312465

#TimeUsernameProblemLanguageResultExecution timeMemory
1312465sakuda00Airplane (NOI23_airplane)C++20
100 / 100
380 ms24656 KiB
#include <iostream> #include <vector> #include <iomanip> #include <map> #include <set> #include <numeric> #include <queue> #include <deque> #include <algorithm> #include <stack> #include <unordered_map> using namespace std; using ll = long long; int N; bool chmin(ll&a, ll b) { if (a > b) { a = b; return true; } return false; } vector<vector<int>> G; vector<ll> A; ll inf = (1LL << 60); int cst(int x, int y) { return (N * x) + y; } vector<pair<ll, ll> > dist(int st) { vector<pair<ll, ll> > res(N, {inf,-1}); priority_queue<pair<ll, int>, vector<pair<ll, int>>, greater<pair<ll, int>> > pq; pq.push({0, st}); res[st] = {0LL, A[st]}; while (!pq.empty()) { auto tp = pq.top(); ll d = tp.first; int v = tp.second; pq.pop(); if (res[v].first < d) continue; for (auto nv : G[v]) { ll ncst = max(d + 1, A[nv]); if (ncst < res[nv].first) { res[nv] = {ncst, max(res[v].second, A[nv])}; pq.push({ncst, nv}); } } } return res; } int main() { int M;cin >> N >> M; G.assign(N, {}); A.assign(N, 0); for (int i = 0;i < N;i++) cin >> A[i]; for (int i = 0;i < M;i++) { int a, b;cin >> a >>b; a--;b--; G[a].push_back(b); G[b].push_back(a); } auto dist0 = dist(0); auto distN = dist(N - 1); ll res = inf; for (int v = 0;v < N;v++) { if (dist0[v].second == A[v] and distN[v].second == A[v]) { //cout << v+1 << " " << dist0[v].first << " " << distN[v].first << endl; res = min(res, dist0[v].first + distN[v].first); } } cout << res << 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...