Submission #1169805

#TimeUsernameProblemLanguageResultExecution timeMemory
1169805CDuongAirplane (NOI23_airplane)C++20
100 / 100
166 ms16640 KiB
/* #pragma GCC optimize("Ofast,unroll-loops") #pragma GCC target("avx2,fma,bmi,bmi2,sse4.2,popcnt,lzcnt") */ #include <bits/stdc++.h> #define taskname "" #define all(x) x.begin(), x.end() #define rall(x) x.rbegin(), x.rend() #define i64 long long #define isz(x) (int)x.size() using namespace std; void solve() { int n, m; cin >> n >> m; vector<int> a(n); for (int i = 0; i < n; ++i) { cin >> a[i]; } vector<vector<int>> g(n); for (int i = 0; i < m; ++i) { int u, v; cin >> u >> v; --u, --v; g[u].emplace_back(v); g[v].emplace_back(u); } const int inf = 1e9; vector<int> dis1(n, inf); priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> pq; pq.emplace(0, 0); dis1[0] = 0; while (not pq.empty()) { auto [d, u] = pq.top(); pq.pop(); if (d != dis1[u]) continue; for (auto v : g[u]) { int nd = max(d + 1, a[v]); if (nd < dis1[v]) { dis1[v] = nd; pq.emplace(nd, v); } } } vector<int> disn(n, inf); pq.emplace(0, n - 1); disn[n - 1] = 0; while (not pq.empty()) { auto [d, u] = pq.top(); pq.pop(); if (d != disn[u]) continue; for (auto v : g[u]) { int nd = max(d + 1, a[v]); if (nd < disn[v]) { disn[v] = nd; pq.emplace(nd, v); } } } int res = inf; for (int i = 0; i < n; ++i) { res = min(res, max(dis1[i], disn[i]) * 2); for (auto u : g[i]) { res = min(res, max(dis1[i], disn[u]) * 2 + 1); } } cout << res << endl; } signed main() { #ifndef CDuongg if (fopen(taskname".inp", "r")) assert(freopen(taskname".inp", "r", stdin)), assert(freopen(taskname".out", "w", stdout)); #else freopen("bai3.inp", "r", stdin); freopen("bai3.out", "w", stdout); auto start = chrono::high_resolution_clock::now(); #endif ios_base::sync_with_stdio(false); cin.tie(nullptr); int t = 1; //cin >> t; while(t--) solve(); #ifdef CDuongg auto end = chrono::high_resolution_clock::now(); cout << "\n"; for(int i = 1; i <= 100; ++i) cout << '='; cout << "\nExecution time: " << chrono::duration_cast<chrono::milliseconds> (end - start).count() << "[ms]" << endl; #endif }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...