Submission #1309224

#TimeUsernameProblemLanguageResultExecution timeMemory
1309224liptonekCommuter Pass (JOI18_commuter_pass)C++20
100 / 100
210 ms15384 KiB
#include <bits/stdc++.h> using namespace std; const long long INF=1e18; struct Edge { int to, weight; }; int n,m,s,t,u,v; vector<vector<Edge>> adj; void dijkstra(int start, vector<long long>& dist) { fill(dist.begin(), dist.end(), INF); dist[start]=0; priority_queue<pair<long long,int>, vector<pair<long long,int>>, greater<pair<long long,int>>> pq; pq.push({0,start}); while(!pq.empty()) { long long d=pq.top().first; int u=pq.top().second; pq.pop(); if(d>dist[u]) { continue; } for(const auto& e : adj[u]) { if(dist[u]+e.weight<dist[e.to]) { dist[e.to]=dist[u]+e.weight; pq.push({dist[e.to], e.to}); } } } } long long dag(const vector<long long>& ds, const vector<long long>& dt, const vector<long long>& du, const vector<long long>& dv) { long long sp=ds[t]; vector<int> nodes; for(int i=1; i<=n; i++) { if(ds[i]!=INF && dt[i]!=INF && ds[i]+dt[i]==sp) { nodes.push_back(i); } } sort(nodes.begin(), nodes.end(), [&](int a, int b) { return ds[a]<ds[b]; }); vector<long long> ndu(n+1,INF); long long current=INF; for(int u : nodes) { if(du[u]<ndu[u]) { ndu[u]=du[u]; } if(ndu[u]!=INF && dv[u]!=INF) { long long cost=ndu[u]+dv[u]; if(cost<current) { current=cost; } } for(const auto& e : adj[u]) { if(ds[u]+e.weight+dt[e.to]==sp) { int v=e.to; if(ndu[u]<ndu[v]) { ndu[v]=ndu[u]; } } } } return current; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cin>>n>>m>>s>>t>>u>>v; adj.resize(n+1); for(int i=0; i<m; i++) { int q,w,e; cin>>q>>w>>e; adj[q].push_back({w,e}); adj[w].push_back({q,e}); } vector<long long> ds(n+1); vector<long long> dt(n+1); vector<long long> du(n+1); vector<long long> dv(n+1); dijkstra(s,ds); dijkstra(t,dt); dijkstra(u,du); dijkstra(v,dv); long long ans=du[v]; ans=min(ans, dag(ds,dt,du,dv)); ans=min(ans,dag(ds,dt,dv,du)); cout<<ans<<endl; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...