Submission #1314990

#TimeUsernameProblemLanguageResultExecution timeMemory
1314990thaibaotran555Airplane (NOI23_airplane)C++20
100 / 100
392 ms24500 KiB
///TRAN THAI BAO :3 #include <iostream> #include <cstdio> #include <vector> #include <queue> using namespace std; #define maxN 200007 #define oo 1e18 typedef pair<long long, long long> pii; typedef pair<pii, long long> piii; int n, m; long long a[maxN]; pii minD[maxN][2]; vector<int>adj[maxN]; priority_queue<piii, vector<piii>, greater<piii> >pq; void readData() { cin >> n >> m; for(int i = 1; i <= n; i++) { cin >> a[i]; minD[i][0] = minD[i][1] = {oo, 0}; } int u, v; for(int i = 0; i < m; i++) { cin >> u >> v; adj[u].push_back(v); adj[v].push_back(u); } } bool better(pii x, pii y) //x > y { if(x.first != y.first) return x.first < y.first; return x.first > y.first; } void dijkstraFrom(int root, int layer) { minD[root][layer] = {0, 0}; pq.push({minD[root][layer], root}); pii newD; while(!pq.empty()) { piii cur = pq.top(); pq.pop(); if(minD[cur.second][layer] != cur.first) continue; int u = cur.second; int curH = minD[u][layer].second; for(int i = 0; i < adj[u].size(); i++) { int v = adj[u][i]; long long w = max(a[v]-curH, 1ll); newD = minD[u][layer]; newD.first += w; newD.second = max(newD.second+1, a[v]); if(better(newD, minD[v][layer])) { minD[v][layer] = newD; pq.push({minD[v][layer], v}); } } } } void solve() { long long ans = oo; for(int i = 1; i <= n; i++) ans = min(ans, minD[i][0].first + minD[i][1].first + max(abs(minD[i][0].second - minD[i][1].second)-1, 0ll)); cout << ans; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); readData(); dijkstraFrom(1, 0); dijkstraFrom(n, 1); solve(); return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...