제출 #1272797

#제출 시각아이디문제언어결과실행 시간메모리
1272797ortsacAirplane (NOI23_airplane)C++20
100 / 100
391 ms27116 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #define pii pair<long long, long long> #define fr first #define se second const int INF = 0x3f3f3f3f3f3f3f3f; const int MAXN = 2e5 + 10; vector<int> adj[MAXN]; int v[MAXN]; int n, m; vector<int> calc(int s) { vector<int> r(n + 1, INF); vector<int> ok(n + 1); r[s] = 0; priority_queue<pii> pq; pq.push({0, s}); while (!pq.empty()) { int u = pq.top().se; pq.pop(); if (ok[u]) continue; ok[u] = 1; for (auto to : adj[u]) { int newD = max(v[to], r[u] + 1); if (r[to] > newD) { r[to] = newD; pq.push({-r[to], to}); } } } return r; } int32_t main() { cin >> n >> m; for (int i = 1; i <= n; i++) cin >> v[i]; for (int i = 0; i < m; i++) { int a, b; cin >> a >> b; adj[a].push_back(b); adj[b].push_back(a); } vector<int> r1 = calc(1), rn = calc(n); int ans = INF; for (int i = 1; i <= n; i++) { for (auto u : adj[i]) ans = min(ans, r1[i] + rn[u] + max(1LL, abs(r1[i] - rn[u]))); } 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...