Submission #1314912

#TimeUsernameProblemLanguageResultExecution timeMemory
1314912exoworldgdCommuter Pass (JOI18_commuter_pass)C++20
100 / 100
285 ms23832 KiB
#include<bits/stdc++.h> #define ll long long #define exoworldgd cin.tie(0)->sync_with_stdio(0),cout.tie(0) #define P pair<ll,int> using namespace std; const int N=1e5+5; const ll inf=1e18; int n,m,s,t,u,v,ord[N]; vector<P>g1[N]; vector<int>g2[N]; ll ds[N],du[N],dv[N],dp[N][2][2]; void f(ll *d,int st){ priority_queue<P,vector<P>,greater<>>pq; for(int i=1;i<=n;i++)d[i]=inf; pq.emplace(0,st),d[st]=0; while(pq.size()){ auto[dt,u]=pq.top();pq.pop(); if(dt==d[u])for(auto[v,w]:g1[u])if(dt+w<d[v])pq.emplace(d[v]=dt+w,v); } } signed main(void){ exoworldgd; cin>>n>>m>>s>>t>>u>>v; for(int i=0,a,b,c;i<m;i++)cin>>a>>b>>c,g1[a].emplace_back(b,c),g1[b].emplace_back(a,c); f(ds,s),f(du,u),f(dv,v); for(int i=1;i<=n;i++)for(auto[v,w]:g1[i])if(ds[v]+w==ds[i])g2[i].push_back(v); for(int i=1;i<=n;i++)dp[i][0][0]=dp[i][0][1]=dp[i][1][0]=dp[i][1][1]=inf; iota(ord,ord+n,1),sort(ord,ord+n,[&](int x,int y){return ds[x]<ds[y];}),dp[s][0][0]=0; for(int i=0;i<n;i++){ for(int j:g2[ord[i]])for(int k=0;k<2;k++)for(int l=0;l<2;l++)dp[ord[i]][k][l]=min(dp[ord[i]][k][l],dp[j][k][l]); dp[ord[i]][0][1]=min(dp[ord[i]][0][1],dp[ord[i]][0][0]+du[ord[i]]),dp[ord[i]][1][0]=min(dp[ord[i]][1][0],dp[ord[i]][0][0]+dv[ord[i]]),dp[ord[i]][1][1]=min({dp[ord[i]][1][1],dp[ord[i]][1][0]+du[ord[i]],dp[ord[i]][0][1]+dv[ord[i]]}); } cout<<min(dp[t][1][1],du[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...