제출 #1354087

#제출 시각아이디문제언어결과실행 시간메모리
1354087takoshanavaAirplane (NOI23_airplane)C++20
0 / 100
100 ms22336 KiB
#include <bits/stdc++.h>
#define int long long
#define pb push_back
#define fs first
#define sc second
using namespace std;

const int N = 2e5 + 5, INF = 1e18;

int n, m, a[N];
vector<int> adj[N];
vector<pair<int, int>> edg;

vector<int> dij(int s){
    vector<int> d(n + 1, INF);
    priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> pq;

    d[s] = 0;
    pq.push({0, s});

    while(pq.size()){
        auto [cw, u] = pq.top(); pq.pop();
        if(cw > d[u]) continue;
        for(auto v:adj[u]){
            int w = max(a[v], d[u] + 1);
            if(d[v] > w) d[v] = w, pq.push({w, v});
        }
    }
    return d;
}

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

    for(int i = 1; i <= m; i++){
        int u, v;
        cin >> u >> v;
        adj[u].pb(v);
        adj[v].pb(u);
        edg.pb({u, v});
        edg.pb({v, u});
    }

    vector<int> mn1 = dij(1), mn2 = dij(n);
    int ans = INF;
    for(int i = 0; i <= n; i++) ans = min(ans, 2 * max(mn1[i], mn2[i]));

    cout << ans << endl;
}


#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…