Submission #1163367

#TimeUsernameProblemLanguageResultExecution timeMemory
1163367boclobanchatCommuter Pass (JOI18_commuter_pass)C++20
16 / 100
178 ms23644 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][3],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][0]=ans[i][1]=ans[i][2]=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*3}),ans[u][1]=ans[u][2]=INF; while(!pq.empty()) { long long a=pq.top().fi,b=pq.top().se/3,c=pq.top().se%3; pq.pop(); if(ans[b][c]<a) continue; for(auto v:ds[b]) { bool res=!(dp[b]+pdp[v.fi]+v.se==dp[t]); if(c==0) { if(ans[v.fi][1-res]>a+v.se*res) pq.push({ans[v.fi][1-res]=a+v.se*res,v.fi*3+1-res}); } else if(c==1) { if(ans[v.fi][c+res]>a+v.se*res) pq.push({ans[v.fi][c+res]=a+v.se*res,v.fi*3+c+res}); } else { if(ans[v.fi][c]>a+v.se) pq.push({ans[v.fi][c]=a+v.se,v.fi*3+c}); } } } cout<<min(ans[v][0],min(ans[v][1],ans[v][2])); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...