제출 #1113373

#제출 시각아이디문제언어결과실행 시간메모리
1113373Dan4LifeCommuter Pass (JOI18_commuter_pass)C++17
31 / 100
308 ms25140 KiB
#include <bits/stdc++.h> using namespace std; #define pb push_back #define sz(a) (int)a.size() #define all(a) begin(a),end(a) using vi = vector<int>; using ll = long long; using ar2 = array<ll,2>; const int N = (int)2e5+10; const int INF = (int)1e9; const ll LINF = (ll)2e18; int n, m, S, T, U, V; ll dis[4][N]; vector<ar2> adj[N]; void dijkstra(int s, int t){ priority_queue<ar2,vector<ar2>,greater<ar2>> pq; while(sz(pq)) pq.pop(); for(int i = 1; i <= n; i++) dis[t][i]=LINF; dis[t][s] = 0; pq.push({0,s}); while(sz(pq)){ auto [D,a] = pq.top(); pq.pop(); if(D!=dis[t][a]) continue; for(auto [b,w] : adj[a]){ if(dis[t][a]+w<dis[t][b]){ dis[t][b] = dis[t][a]+w; pq.push({dis[t][b],b}); } } } } int main(){ ios_base::sync_with_stdio(false); cin.tie(0); cin >> n >> m >> S >> T >> U >> V; for(int i = 0; i < m; i++){ int a, b, c; cin >> a >> b >> c; adj[a].pb({b,c}), adj[b].pb({a,c}); } dijkstra(S,0); dijkstra(T,1); for(int i = 1; i <= n; i++) for(auto &[b,c] : adj[i]) if(dis[0][i]+c+dis[1][b]==dis[0][T] or dis[0][b]+c+dis[1][i]==dis[0][T]) c=0; dijkstra(U,2); dijkstra(V,3); ll ans = dis[2][V]; /*for(int i = 1; i <= n; i++){ if(dis[0][i]+dis[1][i]!=dis[0][T]) continue; ans = min(ans, dis[3][i]); }*/ cout << ans << "\n"; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...