Submission #783483

#TimeUsernameProblemLanguageResultExecution timeMemory
7834838pete8Commuter Pass (JOI18_commuter_pass)C++14
0 / 100
191 ms19488 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; const int mxn=1e5; int n,m,s,t,u,v; #define int long long vector<pii>adj[mxn+10]; bitset<mxn+10>vis; struct dat{ ll c,d,pa; bool operator<(const dat&a)const{return d<a.d;} }; void dijk(int st,vector<int>&dist){ priority_queue<pii,vector<pii>,greater<pii>>pq; pq.p({0,st}); 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(); } 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(n+1,-1); vector<int>dist2(n+1,-1); dijk(u,dist1); dijk(v,dist2); priority_queue<dat>pq; pq.p({s,0,-1}); vector<pair<int,pii>>dist(n+1,{-1,{-1,-1}}); dist[s]={0,{dist1[s],dist2[s]}}; while(!pq.empty()){ dat cur=pq.top(); pq.pop(); if(vis[cur.c])continue; vis[cur.c]=true; if(cur.pa!=-1){ dist[cur.c].s.f=min(dist[cur.c].s.f,dist[cur.pa].s.f); dist[cur.c].s.s=min(dist[cur.c].s.s,dist[cur.pa].s.s); } 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(dist[cur.c].s.f,dist1[i.f]),ndv=min(dist[cur.c].s.s,dist2[i.f]); dist[i.f]={dist[cur.c].f+i.s,{ndu,ndv}}; pq.p({i.f,dist[i.f].f,cur.c}); } else if(dist[i.f].f==dist[cur.c].f+i.s){ dist[i.f].s.f=min(dist[i.f].s.f,dist[cur.c].s.f); dist[i.f].s.f=min(dist[i.f].s.s,dist[cur.c].s.s); } } } 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...