Submission #1303137

#TimeUsernameProblemLanguageResultExecution timeMemory
1303137chaitanyamehtaAirplane (NOI23_airplane)C++20
100 / 100
434 ms25660 KiB
#include<bits/stdc++.h>
using namespace std;

#define int long long
const int maxn = 2 * 1e5 + 1;
vector<int> g[maxn];
int n ,m;
vector<int> d1 , d2;
int a[maxn];

vector<int> compute(int u){
    priority_queue<pair<int , int> , vector<pair<int , int>> , greater<pair<int ,int>>> pq;

    pq.push({0 , u});
    vector<int> dist(n + 1 , LLONG_MAX/4);
    dist[u] = 0;
    while(!pq.empty()){
        int d = pq.top().first;
        int u = pq.top().second;
        pq.pop();
        if(dist[u] != d)continue;

        for(auto v : g[u]){
            int nd = max(d + 1 , a[v]);
            if(dist[v] > nd){
                dist[v] = nd;
                pq.emplace(nd , v);
            }
        }
    }
    return dist;
}

signed main(){
    cin>>n>>m;
    
    for(int i =1;i<=n;i++)cin>>a[i];

    for(int i = 0 ;i < m ;i++){
        int u , v;
        cin>>u>>v;
        g[u].push_back(v);
        g[v].push_back(u);
    }

    d1 = compute(1);
    d2 = compute(n);

    int ans = LLONG_MAX/4;
    for(int i = 1 ; i <= n ; i++){
        if(d1[i] == LLONG_MAX/4 || d2[i] == LLONG_MAX/4)continue;
        int cand = 2 * max(d1[i]  , d2[i]);
        ans = min(cand , ans);
    }
    for(int u = 1 ; u <= n ; u++){
        for(int v : g[u]){
            if(d1[u] == LLONG_MAX/4 || d2[v] == LLONG_MAX/4)continue;
            int cand = 2 * max(d1[u] , d2[v]) + 1;
            ans = min(ans , cand);
        }
    }
    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...