제출 #1166248

#제출 시각아이디문제언어결과실행 시간메모리
1166248pokmui9909Airplane (NOI23_airplane)C++17
22 / 100
46 ms14408 KiB
#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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...