Submission #783476

#TimeUsernameProblemLanguageResultExecution timeMemory
7834768pete8Commuter Pass (JOI18_commuter_pass)C++14
0 / 100
2072 ms26484 KiB
#include<iostream> #include<stack> #include<map> #include<vector> #include<string> #include<unordered_map> #include <queue> #include<cstring> #include<limits.h> #include<cmath> #include<set> #include<algorithm> #include<bitset> using namespace std; #define ll long long #define f first #define endl "\n" #define s second #define pii pair<int,int> #define ppii pair<pii,pii> #define pb push_back #define p push #define fastio ios::sync_with_stdio(false);cin.tie(NULL); using namespace std; #define int long long const int mxn=1e5; int n,m,s,t,u,v; vector<pii>adj[mxn+10]; bitset<mxn+10>vis; vector<int>pa[mxn+10]; struct dat{ int dv,du,c,d; bool operator<(const dat&a)const{ if(c==a.c)return (dv+du)<(a.dv+du); return d<a.d; } }; vector<int> dijk(int st){ priority_queue<pii,vector<pii>,greater<pii>>pq; pq.p({0,st}); vector<int>dist(n+1,-1); dist[st]=0; while(!pq.empty()){ int cur=pq.top().s; pq.pop(); if(vis[cur])continue; vis[cur]=true; for(auto i:adj[cur]){ if(dist[i.f]==-1||dist[i.f]>dist[cur]+i.s){ dist[i.f]=dist[cur]+i.s,pq.p({dist[i.f],i.f}); } } } vis.reset(); return dist; } int32_t main(){ fastio cin>>n>>m>>s>>t>>u>>v; while(m--){ int a,b,c;cin>>a>>b>>c; adj[a].pb({b,c}); adj[b].pb({a,c}); } vector<int>dist1=dijk(u); vector<int>dist2=dijk(v); priority_queue<dat>pq; pq.p({dist2[s],dist1[s],s,0}); vector<pair<int,pii>>dist(n+1,{-1,{-1,-1}}); dist[s]={0,{dist2[s],dist1[s]}}; while(!pq.empty()){ dat cur=pq.top(); pq.pop(); for(auto i:adj[cur.c]){ if(dist[i.f].f==-1||dist[i.f].f>dist[cur.c].f+i.s){ int ndu=min(cur.du,dist1[i.f]),ndv=min(cur.dv,dist2[i.f]); dist[i.f]={dist[cur.c].f+i.s,{ndu,ndv}}; pq.p({ndv,ndu,i.f,dist[i.f].f}); } } } cout<<min(dist[t].s.f+dist[t].s.s,dist1[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...