제출 #1082693

#제출 시각아이디문제언어결과실행 시간메모리
1082693lftroqCommuter Pass (JOI18_commuter_pass)C++14
100 / 100
323 ms52168 KiB
#include<bits/stdc++.h> #define endl '\n' #define fi first #define se second using namespace std; typedef long long ll; const int N=1e5+5; const ll INF=1e15; int n,m,s,t,x,y; vector<pair<int,int>> graph[N],g[4*N]; ll d[2][N],d1[4*N]; void dijkstra(int s,int k) { for(int i=1;i<=n;i++) d[k][i]=INF; d[k][s]=0; priority_queue<pair<ll,pair<int,int>>,vector<pair<ll,pair<int,int>>>,greater<pair<ll,pair<int,int>>>> pq; pq.push({d[k][s],{k,s}}); while((int)pq.size()) { ll temp=pq.top().fi; int k=pq.top().se.fi,u=pq.top().se.se; pq.pop(); if(temp!=d[k][u]) continue; for(int i=0;i<(int)graph[u].size();i++) { int v=graph[u][i].fi,w=graph[u][i].se; if(d[k][v]>d[k][u]+w) { d[k][v]=d[k][u]+w; pq.push({d[k][v],{k,v}}); } } } } void solve() { cin >> n >> m >> s >> t >> x >> y; for(int i=1;i<=m;i++) { int u,v,w; cin >> u >> v >> w; graph[u].push_back({v,w}); graph[v].push_back({u,w}); } dijkstra(s,0);dijkstra(t,1); for(int u=1;u<=n;u++) { g[u].push_back({n+u,0}); g[u].push_back({2*n+u,0}); g[n+u].push_back({3*n+u,0}); g[2*n+u].push_back({3*n+u,0}); for(int i=0;i<(int)graph[u].size();i++) { int v=graph[u][i].fi,w=graph[u][i].se; if(d[0][u]+w+d[1][v]==d[0][t]) { g[n+u].push_back({n+v,0}); g[2*n+v].push_back({2*n+u,0}); } g[u].push_back({v,w});g[3*n+u].push_back({3*n+v,w}); } } priority_queue<pair<ll,int>,vector<pair<ll,int>>,greater<pair<ll,int>>> pq; for(int i=1;i<=4*n;i++) d1[i]=INF; d1[x]=0; pq.push({d1[x],x}); while((int)pq.size()) { ll temp=pq.top().fi; int u=pq.top().se; pq.pop(); if(temp!=d1[u]) continue; for(int i=0;i<(int)g[u].size();i++) { int v=g[u][i].fi,w=g[u][i].se; if(d1[v]>d1[u]+w) { d1[v]=d1[u]+w; pq.push({d1[v],v}); } } } cout << d1[3*n+y] << endl; } int main() { ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0); //freopen("hanhhhh.inp","r",stdin); //freopen("hanhhhh.out","w",stdout); int t=1; //cin >> t; while(t--) solve(); 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...