제출 #76544

#제출 시각아이디문제언어결과실행 시간메모리
76544VasiljkoCommuter Pass (JOI18_commuter_pass)C++14
16 / 100
537 ms27332 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; const ll MOD = 1e9+7; const int N =1e5+5; const ll INF = 1e18; int n,m,T; bool vis[N]; ll du[N],dv[N],ds[N],dt[N],ans; vector<pair<int,ll> >v[2*N]; priority_queue<pair<ll,int> >pq; multiset<ll>su,sv; void Dijkstra(ll *d,int s){ for(int i=1;i<=N;i++)d[i]=INF; d[s]=0; pq.push({-d[s],s}); while(!pq.empty()){ auto cur=pq.top(); pq.pop(); for(auto e:v[cur.second]){ if(d[cur.second]+e.second<d[e.first]){ d[e.first]=d[cur.second]+e.second; pq.push({-d[e.first],e.first}); } } } } void dfs(int cur){ vis[cur]=true; su.insert(du[cur]); sv.insert(dv[cur]); ans=min(ans,*(su.begin())+dv[cur]); ans=min(ans,*(sv.begin())+du[cur]); for(auto e:v[cur]){ if(ds[cur]+e.second+dt[e.first]==ds[T]&&!vis[e.first]){//if e is part of shortest path dfs(e.first); } } su.erase(su.find(du[cur])); sv.erase(sv.find(dv[cur])); } int main() { ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); int s,t,a,b,x,y,z; cin>>n>>m; cin>>s>>t; cin>>a>>b; T=t; for(int i=1;i<=m;i++){ cin>>x>>y>>z; v[x].push_back({y,z}); v[y].push_back({x,z}); } Dijkstra(du,a); Dijkstra(dv,b); Dijkstra(ds,s); Dijkstra(dt,t); ans=INF; dfs(s); cout<<ans; 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...