Submission #1315825

#TimeUsernameProblemLanguageResultExecution timeMemory
1315825nguyenkhangninh99Airplane (NOI23_airplane)C++20
100 / 100
411 ms25688 KiB
#include <bits/stdc++.h> using namespace std; #define int long long const int maxn = 2e5 + 5, inf = 1e18 + 5; vector<int> adj[maxn]; signed main(){ ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); int n, m; cin >> n >> m; vector<int> a(n + 1); for(int i = 1; i <= n; i++) cin >> a[i]; auto dijk = [&](int s) -> vector<int> { vector<int> d(n + 1, inf); d[s] = 0; priority_queue<pair<int, int>> pq; pq.push({0, s}); while(!pq.empty()){ auto [dist, u] = pq.top(); pq.pop(); if(-dist != d[u]) continue; for(int v: adj[u]){ int nxt = max(-dist + 1, a[v]); if(d[v] > nxt){ d[v] = nxt; pq.push({-d[v], v}); } } } return d; }; for(int i = 1; i <= m; i++){ int u, v; cin >> u >> v; adj[v].push_back(u); adj[u].push_back(v); } vector<int> d1 = dijk(1), dn = dijk(n); int ans = inf; for(int u = 1; u <= n; u++){ ans = min(ans, max(d1[u], dn[u]) * 2); for(int v: adj[u]){ ans = min(ans, max(d1[u], dn[v]) * 2 + 1); ans = min(ans, max(d1[v], dn[u]) * 2 + 1); } } cout << ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...