제출 #1337250

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

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

signed main()
{
    for(int i=0;i<N;i++) d[i]=INF;
    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});
    }
    d[1]=h[1]-st_pos;
    pq.push({-(h[1]-st_pos),1});
    while(!pq.empty()){
        auto [d_u,u]=pq.top();
        pq.pop();
        d_u*=(-1);
        for(auto [v,w]:adj[u]){
            if(h[u]-w<0) continue;
            int d_v=d_u+w;
            if(h[u]-w>h[v]){
                int new_pos=h[v]+w;
                if(u==1) d_v+=(st_pos-new_pos-d_u);
                else d_v-=(h[u]-new_pos);
            }
            else d_v+=(h[v]-(h[u]-w));
            if(d[v]>d_v){
                d[v]=d_v;
                pq.push({-d_v,v});
            }
        }
    }
    cout << (d[n]==INF?-1:d[n]);
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...