Submission #1280871

#TimeUsernameProblemLanguageResultExecution timeMemory
1280871aegAirplane (NOI23_airplane)C++20
100 / 100
223 ms24516 KiB
#include <bits/stdc++.h> using namespace std; #define int int64_t signed main() { cin.tie(0)->sync_with_stdio(0); int n, m; cin >> n >> m; vector<int> a(n); for (auto &x : a) cin >> x; vector<vector<int>> adj(n, vector<int>()); for (int i = 0; i < m; i++) { int x, y; cin >> x >> y; x--; y--; adj[x].push_back(y); adj[y].push_back(x); } vector<int> dist(n, INT64_MAX); dist[0] = 0; vector<int> ndist(n, INT64_MAX); ndist[n - 1] = 0; priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> pq; pq.emplace(0, 0); while (!pq.empty()) { auto [dt, s] = pq.top(); pq.pop(); for (int x : adj[s]) { if (dist[x] > max(dt + 1, a[x])) { dist[x] = max(dt + 1, a[x]); pq.emplace(dist[x], x); } } } pq.emplace(0, n - 1); while (!pq.empty()) { auto [dt, s] = pq.top(); pq.pop(); for (int x : adj[s]) { if (ndist[x] > max(dt + 1, a[x])) { ndist[x] = max(dt + 1, a[x]); pq.emplace(ndist[x], x); } } } int ans = INT64_MAX; for (int i = 0; i < n; i++) { ans = min(ans, max(dist[i], ndist[i]) << 1); for (int x : adj[i]) { ans = min(ans, max(dist[i], ndist[x]) << 1 | 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...