제출 #1354082

#제출 시각아이디문제언어결과실행 시간메모리
1354082Ronin13Airplane (NOI23_airplane)C++20
100 / 100
265 ms18176 KiB
#include <bits/stdc++.h> 
#define pb push_back
using namespace std;


int main() {
    int n; cin >> n;
    int m; cin >> m;
    vector <int> a(n + 1);
    for(int i = 1; i <= n; i++) {
        cin >> a[i];
    }
    vector <vector <int>> g(n + 1);
    for(int i = 1; i <= m; i++) {
        int u, v; cin >> u >> v;
        g[u].pb(v);
        g[v].pb(u);
    }
    priority_queue <pair<int,int> > pq;
    vector <int> d(n + 1 ,1e9); 
    vector <int> mx(n + 1);
    pq.push({0,1});
    d[1] = 0;
    mx[1] = 0;
    while(!pq.empty()) {
        int v = pq.top().second; pq.pop();
        for(int to : g[v]) {
            int Mx = max(a[to], d[v] + 1);
            if(Mx < d[to]) {
                d[to] = Mx;
                pq.push({-d[to], to});
                mx[to] = max(mx[v], a[to]);
            }
            
        }
    }
    vector <int> D(n + 1, 1e9);
    vector <int> MX(n + 1);
    pq.push({0,n});
    D[n] = 0;
    MX[n] = 0;
    while(!pq.empty()) {
        int v = pq.top().second; pq.pop();
        for(int to : g[v]) {
            int Mx = max(a[to], D[v] + 1);
            if(Mx < D[to]) {
                D[to] = Mx;
                pq.push({-D[to], to});
                MX[to] = max(MX[v], a[to]);
            }
            
        }
    }
    int ans = INT_MAX;
    for(int i = 1; i<= n; i++) {
        if(mx[i] == a[i] && MX[i] == a[i]) ans = min(ans, D[i] + d[i]);
    }
    cout << ans;
    return 0;
}
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…