제출 #1163364

#제출 시각아이디문제언어결과실행 시간메모리
1163364boclobanchatCommuter Pass (JOI18_commuter_pass)C++20
16 / 100
141 ms19904 KiB
#include<bits/stdc++.h> using namespace std; #define ii pair<long long,long long> #define fi first #define se second const int MAXN=2e5+5; const long long INF=1e18; vector<ii> ds[MAXN]; priority_queue< ii,vector<ii>,greater<ii> > pq; long long dp[MAXN],ans[MAXN],pdp[MAXN]; int main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n,m,s,t,u,v; cin>>n>>m>>s>>t>>u>>v; for(int i=1;i<=m;i++) { int l,r,v; cin>>l>>r>>v; ds[l].push_back({r,v}),ds[r].push_back({l,v}); } for(int i=1;i<=n;i++) dp[i]=INF*(i!=s),pdp[i]=INF*(i!=t),ans[i]=INF*(i!=u); pq.push({0,s}); while(!pq.empty()) { long long a=pq.top().fi,b=pq.top().se; pq.pop(); if(dp[b]<a) continue; for(auto v:ds[b]) if(dp[v.fi]>a+v.se) pq.push({dp[v.fi]=a+v.se,v.fi}); } pq.push({0,t}); while(!pq.empty()) { long long a=pq.top().fi,b=pq.top().se; pq.pop(); if(pdp[b]<a) continue; for(auto v:ds[b]) if(pdp[v.fi]>a+v.se) pq.push({pdp[v.fi]=a+v.se,v.fi}); } pq.push({0,u}); while(!pq.empty()) { long long a=pq.top().fi,b=pq.top().se; pq.pop(); if(ans[b]<a) continue; for(auto v:ds[b]) if(ans[v.fi]>a+v.se*(!(dp[b]+pdp[v.fi]+v.se==dp[t]))) pq.push({ans[v.fi]=a+v.se*(!(dp[b]+pdp[v.fi]+v.se==dp[t])),v.fi}); } cout<<ans[v]; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...