Submission #1112989

#TimeUsernameProblemLanguageResultExecution timeMemory
1112989AvianshAirplane (NOI23_airplane)C++17
10 / 100
597 ms8528 KiB
#include <bits/stdc++.h> using namespace std; int n,m; signed main(){ ios::sync_with_stdio(0); cin.tie(0); cin >> n >> m; assert(n<=2000); assert(m<=4000); int a[n]; for(int &i : a){ cin >> i; assert(i<=2000); } 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); } priority_queue<array<int,3>,vector<array<int,3>>,greater<array<int,3>>>pq; pq.push({0,0,0}); bool vis[2005][2005]; for(int i = 0;i<2005;i++){ for(int j = 0;j<2005;j++){ vis[i][j]=0; } } //height,place,downbool long long ans = 0; while(!pq.empty()){ array<int,3>cur = pq.top(); //cout << cur[0] << " " << cur[1] << " " << cur[2] << " " << cur[3] << "\n"; pq.pop(); if(cur[1]>2000){ continue; } if(cur[1]==0&&cur[2]==n-1){ ans=cur[0]; break; } if(vis[cur[1]][cur[2]]){ continue; } vis[cur[1]][cur[2]]=1; if(!vis[cur[1]+1][cur[2]]) pq.push({cur[0]+1,cur[1]+1,cur[2]}); if(cur[1]>a[cur[2]]&&!vis[cur[1]-1][cur[2]]){ pq.push({cur[0]+1,cur[1]-1,cur[2]}); } for(int i : g[cur[2]]){ if(cur[1]-1>=a[i]&&!vis[cur[1]-1][i]){ pq.push({cur[0]+1,cur[1]-1,i}); //vis[cur[1]-1][i]=1; } if(cur[1]>=a[i]&&!vis[cur[1]][i]){ pq.push({cur[0]+1,cur[1],i}); //vis[cur[1]][i]=1; } if(cur[1]+1>=a[i]&&!vis[cur[1]+1][i]){ pq.push({cur[0]+1,cur[1]+1,i}); //vis[cur[1]+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...