Submission #1171905

#TimeUsernameProblemLanguageResultExecution timeMemory
1171905KhoaDuyAirplane (NOI23_airplane)C++17
100 / 100
176 ms17448 KiB
#include<bits/stdc++.h> using namespace std; #define endl '\n' vector<int> dijik(int s,int a[],vector<vector<int>> &graph,int n){ vector<int> bst(n+1); for(int i=1;i<=n;i++){ bst[i]=1e9; } priority_queue<pair<int,int>,vector<pair<int,int>>,greater<pair<int,int>>> pq; pq.push({0,s}); bst[s]=0; while(!pq.empty()){ int u=pq.top().second,dist=pq.top().first; pq.pop(); if(dist>bst[u]){ continue; } for(int v:graph[u]){ int w=max(1,a[v]-dist); if(dist+w<bst[v]){ bst[v]=dist+w; pq.push({bst[v],v}); } } } return bst; } signed main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); int n,m; cin >> n >> m; int a[n+1]; for(int i=1;i<=n;i++){ cin >> a[i]; } vector<vector<int>> graph(n+1); for(int i=0;i<m;i++){ int u,v; cin >> u >> v; graph[u].push_back(v); graph[v].push_back(u); } vector<int> bst1=dijik(1,a,graph,n); vector<int> bstn=dijik(n,a,graph,n); int ans=1e9; for(int u=1;u<=n;u++){ ans=min(ans,2*max(bst1[u],bstn[u])); } for(int u=1;u<=n;u++){ for(int v:graph[u]){ ans=min(ans,2*max(bst1[u],bstn[v])+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...