제출 #1178473

#제출 시각아이디문제언어결과실행 시간메모리
1178473prideliqueeeAirplane (NOI23_airplane)C++20
100 / 100
199 ms32048 KiB
#include<bits/stdc++.h> using namespace std; #define int long long #define f first #define s second struct st { int u,w; 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]; for(int i=0;i<m;i++) { int x,y; cin>>x>>y; ad[x].push_back({y,a[y]}); ad[y].push_back({x,a[x]}); } int dist[n+1]; memset(dist,127,sizeof dist); dist[1]=0; priority_queue<st> q; q.push({1,0}); while(!q.empty()) { auto p=q.top(); q.pop(); int u=p.u,w=p.w; if(dist[u]<w) continue; for(auto x:ad[u]) { if(dist[x.f]>max(x.s,w+1)) { dist[x.f]=max({x.s,w+1}); q.push({x.f,dist[x.f]}); } } } int dist1[n+1]; memset(dist1,127,sizeof dist); dist1[n]=0; q.push({n,0}); while(!q.empty()) { auto p=q.top(); q.pop(); int u=p.u,w=p.w; if(dist1[u]<w) continue; for(auto x:ad[u]) { if(dist1[x.f]>max(x.s,w+1)) { dist1[x.f]=max({x.s,w+1}); q.push({x.f,dist1[x.f]}); } } } int ans=LLONG_MAX; for(int i=1;i<=n;i++) { ans=min(ans,max(dist[i],dist1[i])*2); for(auto x:ad[i]) { ans=min(ans,max(dist[i],dist1[x.f])*2+1); ans=min(ans,max(dist1[i],dist[x.f])*2+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...