Submission #1323649

#TimeUsernameProblemLanguageResultExecution timeMemory
1323649boclobanchatAirplane (NOI23_airplane)C++20
100 / 100
228 ms20368 KiB
#include<bits/stdc++.h>
using namespace std;
const int MAXN=2e5+5;
const long long INF=1e18;
long long dp1[MAXN],dp2[MAXN],F[MAXN],A[MAXN];
vector<int> ds[MAXN];
priority_queue< pair<long long,int>,vector< pair<long long,int> >,greater< pair<long long,int> > > pq;
queue<int> Q;
int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    int n,m;
    cin>>n>>m;
    for(int i=1;i<=n;i++) cin>>A[i];
    for(int i=1;i<=m;i++)
    {
    	int l,r;
    	cin>>l>>r;
    	ds[l].push_back(r),ds[r].push_back(l);
	}
	for(int i=1;i<=n;i++) dp1[i]=dp2[i]=INF;
	dp1[1]=0,pq.push({0,1});
	while(!pq.empty())
	{
		long long a=pq.top().first;
		int b=pq.top().second;
		pq.pop();
		if(dp1[b]<a) continue;
		for(auto v:ds[b]) if(dp1[v]>max(a+1,A[v])) pq.push({dp1[v]=max(a+1,A[v]),v});
	}
	dp2[n]=0,pq.push({0,n});
	while(!pq.empty())
	{
		long long a=pq.top().first;
		int b=pq.top().second;
		pq.pop();
		if(dp2[b]<a) continue;
		for(auto v:ds[b]) if(dp2[v]>max(a+1,A[v])) pq.push({dp2[v]=max(a+1,A[v]),v});
	}
	long long ans=INF;
	for(int i=1;i<=n;i++)
	{
		ans=min(ans,max(dp1[i],dp2[i])*2);
		for(auto v:ds[i]) ans=min(ans,max(dp1[i],dp2[v])*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...