제출 #1122541

#제출 시각아이디문제언어결과실행 시간메모리
1122541Trisanu_DasAirplane (NOI23_airplane)C++20
100 / 100
671 ms23704 KiB
#include <bits/stdc++.h> using namespace std; int main(){ int n, m; cin >> n >> m; vector<int> v(n); vector<vector<int >> g(n); for(auto &e:v) cin >> e; for(int i=0; i<m; i++){ int a, b; cin >> a >> b; a--; b--; g[a].push_back(b); g[b].push_back(a); } vector<int> ans(n, -1), ans2(n, -1), tm(n, -1), tm2(n, -1); priority_queue<tuple<int, int, int >> pq; pq.push({0, 0, 0}); while(pq.size()){ auto [t, h, cur]=pq.top(); pq.pop(); if(tm[cur]!=-1) continue; t=tm[cur]=-t; h=ans[cur]=-h; for(auto ch:g[cur]) pq.push({-max(v[ch], t + 1), -max(h, v[ch]), ch}); } pq.push({0, 0, n-1}); while(pq.size()){ auto [t, h, cur]=pq.top(); pq.pop(); if(tm2[cur]!=-1) continue; h=ans2[cur]=-h; t=tm2[cur]=-t; for(auto ch:g[cur]) pq.push({-max(v[ch], t + 1), -max(h, v[ch]), ch}); } int ans_ = INT_MAX; for(int i = 0; i < n; i++) ans_ = min(ans_, tm[i] + tm2[i] + abs(ans[i] - ans2[i])); 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...