제출 #1166207

#제출 시각아이디문제언어결과실행 시간메모리
1166207altern23Commuter Pass (JOI18_commuter_pass)C++20
15 / 100
352 ms46060 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #define pii pair<ll, ll> #define fi first #define sec second #define ld long double const ll N = 2e5; const ll INF = 4e18; const ll MOD = 1e9 + 7; ll dp1[N + 5], dp2[N + 5], dp3[N + 5], dp4[N + 5], dp5[N + 5]; vector<pii> adj[N + 5]; map<pii, ll> vis; /* dp1 -> dari s dp2 -> dari u dp3 -> dari v dp4 dan dp5 -> calc */ ll ans = INF; void dfs(ll idx){ dp4[idx] = dp2[idx]; dp5[idx] = dp3[idx]; for(auto [i, j] : adj[idx]){ if(!vis[{idx, i}] && dp1[i] + j == dp1[idx]){ vis[{idx, i}] = vis[{i, idx}] = 1; dfs(i); dp4[idx] = min(dp4[idx], dp4[i]); dp5[idx] = min(dp5[idx], dp5[i]); } } ans = min(ans, dp3[idx] + dp4[idx]); ans = min(ans, dp2[idx] + dp5[idx]); } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int tc = 1; // cin >> tc; for(;tc--;){ ll n, m; cin >> n >> m; ll s, t; cin >> s >> t; ll u, v; cin >> u >> v; for(int i = 1; i <= n; i++){ dp1[i] = dp2[i] = dp3[i] = dp4[i] = dp5[i] = INF; } for(int i = 1; i <= m; i++){ ll u, v, w; cin >> u >> v >> w; adj[u].push_back({v, w}); adj[v].push_back({u, w}); } for(int i = 1; i <= n; i++){ sort(adj[i].begin(), adj[i].end()); adj[i].erase(unique(adj[i].begin(), adj[i].end()), adj[i].end()); } dp1[s] = 0; priority_queue<pii, vector<pii>, greater<pii>> pq; pq.push({0, s}); for(;!pq.empty();){ auto [dist, idx] = pq.top(); pq.pop(); if(dist > dp1[idx]) continue; for(auto [i, j] : adj[idx]){ if(dp1[i] > dist + j){ dp1[i] = dist + j; pq.push({dp1[i], i}); } } } dp2[u] = 0; pq.push({0, u}); for(;!pq.empty();){ auto [dist, idx] = pq.top(); pq.pop(); if(dist > dp2[idx]) continue; for(auto [i, j] : adj[idx]){ if(dp2[i] > dist + j){ dp2[i] = dist + j; pq.push({dp2[i], i}); } } } dp3[v] = 0; pq.push({0, v}); for(;!pq.empty();){ auto [dist, idx] = pq.top(); pq.pop(); if(dist > dp3[idx]) continue; for(auto [i, j] : adj[idx]){ if(dp3[i] > dist + j){ dp3[i] = dist + j; pq.push({dp3[i], i}); } } } ans = dp2[v]; dfs(t); 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...