제출 #1291288

#제출 시각아이디문제언어결과실행 시간메모리
1291288nathlol2Commuter Pass (JOI18_commuter_pass)C++20
15 / 100
218 ms34708 KiB
#include <bits/stdc++.h> #define int long long using namespace std; const int N = 2e5 + 5; int n, m, s, t, ss, tt, ans = 4e18, dist[4][N], dp[N], dp1[N], vis[N]; tuple<int, int, int> ed[N]; vector<pair<int, int>> g[N]; vector<int> dag[N], rv[N]; void dij(int st, int id){ for(int i = 0;i<N;i++) dist[id][i] = 4e18; priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> pq; dist[id][st] = 0; pq.push({0, st}); while(!pq.empty()){ auto [d, u] = pq.top(); pq.pop(); if(d > dist[id][u]) continue; for(auto [v, w] : g[u]){ if(d + w < dist[id][v]){ dist[id][v] = d + w; pq.push({d + w, v}); } } } } signed main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); cin >> n >> m >> s >> t >> ss >> tt; for(int i = 0;i<m;i++){ auto &[u, v, w] = ed[i]; cin >> u >> v >> w; g[u].push_back({v, w}); g[v].push_back({u, w}); } dij(s, 0); dij(t, 1); dij(ss, 2); dij(tt, 3); // for(int i = 0;i<4;i++){ // for(int j = 1;j<=n;j++){ // cout << dist[i][j] << ' '; // } // cout << '\n'; // } for(int i = 0;i<m;i++){ auto [u, v, w] = ed[i]; if(dist[0][u] + w + dist[1][v] == dist[0][t]){ dag[u].push_back(v); rv[v].push_back(u); } if(dist[0][v] + w + dist[1][u] == dist[0][t]){ dag[v].push_back(u); rv[u].push_back(v); } } queue<int> q; q.push(t); vis[t] = 1; while(!q.empty()){ auto u = q.front(); q.pop(); // cout << u << '\n'; dp[u] = 4e18; dp1[u] = 4e18; for(auto v : dag[u]){ dp[u] = min(dp[u], dp[v]); dp1[u] = min(dp1[u], dp1[v]); } dp[u] = min(dp[u], dist[3][u]); dp1[u] = min(dp1[u], dist[2][u]); ans = min(ans, dist[2][u] + dp[u]); ans = min(ans, dist[3][u] + dp1[u]); for(auto v : rv[u]){ dp[v] = min(dp[v], dp[u]); dp1[v] = min(dp1[v], dp1[u]); if(!vis[v]){ vis[v] = 1; q.push(v); } } } cout << min(ans, dist[2][tt]); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...