Submission #1112970

#TimeUsernameProblemLanguageResultExecution timeMemory
1112970AvianshAirplane (NOI23_airplane)C++17
0 / 100
1096 ms98980 KiB
#include <bits/stdc++.h> using namespace std; int n,m; signed main(){ ios::sync_with_stdio(0); cin.tie(0); cin >> n >> m; int a[n]; for(int &i : a){ cin >> i; } vector<int>g[n]; 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); } set<array<int,4>>pq; pq.insert({0,0,0,0}); //time,current height, place, downbool set<array<int,3>>vis; //height,place,downbool set<int>vis1; long long ans = 0; while(!pq.empty()){ array<int,4>cur = *(pq.begin()); //cout << cur[0] << " " << cur[1] << " " << cur[2] << " " << cur[3] << "\n"; pq.erase(pq.begin()); if(vis.find({cur[1],cur[2],cur[3]})!=vis.end()){ continue; } vis.insert({cur[1],cur[2],cur[3]}); vis1.insert(cur[2]); if(cur[2]==n-1){ pq.insert({cur[0]+cur[1],0,cur[2],1}); if(cur[1]==0){ ans=cur[0]; break; } } for(int i : g[cur[2]]){ if(vis1.find(i)!=vis1.end()){ continue; } if(cur[3]){ if(a[i]<=cur[1]-1){ pq.insert({cur[0]+1,cur[1]-1,i,1}); } else if(a[i]<=cur[1]){ pq.insert({cur[0]+1,cur[1],i,1}); } } else{ if(a[i]>cur[1]){ pq.insert({a[i]-cur[1]+cur[0],a[i],i,0}); } else{ pq.insert({cur[0]+1,cur[1]+1,i,0}); } if(a[i]<=cur[1]-1){ pq.insert({cur[0]+1,cur[1]-1,i,1}); } else if(a[i]<=cur[1]){ pq.insert({cur[0]+1,cur[1],i,1}); } } } } cout << ans; 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...