제출 #1337257

#제출 시각아이디문제언어결과실행 시간메모리
1337257Nipphitch날다람쥐 (JOI14_ho_t4)C++20
100 / 100
218 ms26036 KiB
#include <bits/stdc++.h>
using namespace std;
#define int long long 
#define a2 array <int,2>
#define a3 array <int,3>
const int N=1e5+5;
const int INF=1e15+7;

int n,m,st_pos,d[N],h[N],p[N],tt;
vector <a2> adj[N];
priority_queue <a3,vector <a3>,greater <a3>> pq; // -d_u , u;

signed main()
{
    memset(d,-1,sizeof(d));
    ios::sync_with_stdio(0);
    cin.tie(0);
    cin >> n >> m >> st_pos;
    for(int i=1;i<=n;i++) cin >> h[i];
    for(int i=1;i<=m;i++){
        int u,v,w;
        cin >> u >> v >> w;
        adj[u].push_back({v,w});
        adj[v].push_back({u,w});
    }
    pq.push({0,st_pos,1});
    while(!pq.empty()){
        auto [d_u,pos,u]=pq.top();
        pq.pop();
        if(u==n){
            cout << d_u+h[u]-pos;
            exit(0);
        }
        if(d[u]!=-1) continue;
        d[u]=d_u;
        for(auto [v,w]:adj[u]){
            if(d[v]==-1 && w<=h[u]){
                if(pos<w) pq.push({d_u+w+w-pos,0,v});
                else if(pos-w>h[v]) pq.push({d_u+pos-h[v],h[v],v});
                else pq.push({d_u+w,pos-w,v}); 
            }
        }
    }
    cout << -1;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...