제출 #1082874

#제출 시각아이디문제언어결과실행 시간메모리
1082874bundaunuoctuongCommuter Pass (JOI18_commuter_pass)C++14
15 / 100
427 ms262144 KiB
#include<bits/stdc++.h> #define N 1000000 #define inf ll(1e18+7) #define pii pair<int,int> #define pll pair<ll,ll> #define fi first #define se second #define pb push_back #define all(x) x.begin(),x.end() using namespace std; typedef long long ll; typedef double db; const int M = 1e9+7; int n,m,s,t,x,y; vector<pll> adj1[N+3],adj2[N+3]; vector<int> tmp[N+3]; ll d[N+3]; void dijkstra1(){ priority_queue<pll,vector<pll>,greater<pll>> qQ; fill(d+1,d+n+1,inf); d[s]=0; qQ.push({0,s}); while(!qQ.empty()){ ll du=qQ.top().fi; int u=qQ.top().se; qQ.pop(); if(du!=d[u]) continue; for(auto P:adj1[u]){ ll w=P.fi; int v=P.se; if(d[v]>d[u]+w){ d[v]=d[u]+w; tmp[v].clear(); tmp[v].pb(u); qQ.push({d[v],v}); } else if(d[v]==d[u]+w) tmp[v].pb(u); } } } void dijkstra2(){ priority_queue<pll,vector<pll>,greater<pll>> qQ; fill(d+1,d+n+1,inf); d[x]=0; qQ.push({0,x}); while(!qQ.empty()){ ll du=qQ.top().fi; int u=qQ.top().se; qQ.pop(); if(du!=d[u]) continue; for(auto P:adj2[u]){ ll w=P.fi; int v=P.se; if(d[v]>d[u]+w){ d[v]=d[u]+w; qQ.push({d[v],v}); } } for(auto P:adj1[u]){ ll w=P.fi; int v=P.se; if(d[v]>d[u]+w){ d[v]=d[u]+w; qQ.push({d[v],v}); } } } } void DFS(int u, int p){ for(auto v:tmp[u]) if(v!=p){ adj2[u].pb({0,v}); adj2[v].pb({0,u}); DFS(v,u); } } void Solve(){ dijkstra1(); DFS(t,0); dijkstra2(); cout << d[y]; } void Inp(){ cin >> n >> m >> s >> t >> x >> y; for(int u,v,w,i=1; i<=m; i++){ cin >> u >> v >> w; adj1[u].pb({w,v}); adj1[v].pb({w,u}); } } int main(){ ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0); int T=1; // cin >> T; while(T--){ Inp(); Solve(); } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...