Submission #1178417

#TimeUsernameProblemLanguageResultExecution timeMemory
1178417prideliqueeeAirplane (NOI23_airplane)C++20
0 / 100
45 ms19012 KiB
#include<bits/stdc++.h> using namespace std; #define int long long #define f first #define s second struct st { int u,w,mx; bool operator < (const st&o) const { return w>o.w; } }; signed main() { ios_base::sync_with_stdio(0); cin.tie(0); int n,m; cin>>n>>m; int a[n+1]; for(int i=1;i<=n;i++) cin>>a[i]; vector<pair<int,int>> ad[n+1]; set<int> ss; for(int i=0;i<m;i++) { int x,y; cin>>x>>y; ad[x].push_back({y,max(a[x],a[y])}); ad[y].push_back({x,max(a[x],a[y])}); if(x==n) ss.insert(y); else if(y==n) ss.insert(x); } pair<int,int> dist[n+1]; memset(dist,127,sizeof dist); dist[1]={0,0}; priority_queue<st> q; q.push({1,0,0}); while(!q.empty()) { auto p=q.top(); q.pop(); int u=p.u,w=p.w,mx=p.mx; if(dist[u].f<w||(dist[u].f==w&&dist[u].s>mx)) continue; for(auto x:ad[u]) { int ww; if(mx<x.s) { if(dist[x.f].f>w+(x.s-mx)*2) { dist[x.f].f=w+(x.s-mx)*2; dist[x.f].s=x.s; q.push({x.f,w+(x.s-mx)*2,x.s}); } } else { if(dist[x.f].f>w+1||(dist[x.f].f==w+1&&dist[x.s].s>mx)) { dist[x.f].f=w+1; dist[x.f].s=mx; q.push({x.f,w+1,mx}); } } } } int ans=LLONG_MAX; for(auto x:ss) { ans=min(ans,dist[x].f); } 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...