Submission #1251046

#TimeUsernameProblemLanguageResultExecution timeMemory
1251046dyogorbCommuter Pass (JOI18_commuter_pass)C++20
100 / 100
457 ms33804 KiB
#include <bits/stdc++.h> using namespace std; #define darvem ios_base::sync_with_stdio(false);cin.tie(NULL) #define endl '\n' #define ll long long #define int long long const int INF = 1e18; typedef pair<int, int> pii; int n, m, s, t, u, v; vector<vector<pii>> g; vector<int> d1(int st){ priority_queue<pii, vector<pii>, greater<pii>> pq; pq.push({0, st}); vector<int> dst(n, INF); while(!pq.empty()){ auto [d, x] = pq.top(); pq.pop(); if(dst[x] != INF) continue; dst[x] = d; for(auto e : g[x]){ pq.push({e.second + d, e.first}); } } return dst; } void dfs(vector<int> &visited, vector<int> &dst_u, vector<int> &dst_v, vector<vector<int>> &parents, vector<int> &dpu, vector<int> &dpv, int curr){ if(visited[curr]) return; visited[curr] = 1; for (auto p : parents[curr]) { dfs(visited, dst_u, dst_v, parents, dpu, dpv, p); dpu[curr] = min({dst_u[p], dpu[p], dpu[curr]}); dpv[curr] = min({dst_v[p], dpv[p], dpv[curr]}); } } int d2(){ priority_queue<tuple<int, int, int>, vector<tuple<int, int, int>>, greater<tuple<int, int, int>>> pq; vector<int> dst(n, INF), dpu(n, INF), dpv(n, INF), dst_u = d1(u), dst_v = d1(v); vector<vector<int>> parents(n); pq.push({0, s, -1}); while(!pq.empty()){ auto [d, x, p] = pq.top(); pq.pop(); if(dst[x] != INF){ if(dst[x] == d && p != -1) parents[x].push_back(p); continue; } if(p!= -1) parents[x].push_back(p); dst[x] = d; for(auto e : g[x]){ pq.push({e.second + d, e.first, x}); } } vector<int> visited(n); dfs(visited, dst_u, dst_v, parents, dpu, dpv, t); int ans = 1e18; for(int i = 0; i < n; i++){ ans = min({ans, dpu[i] + dst_v[i], dpv[i] + dst_u[i]}); } return ans; } signed main(){ darvem; cin >> n >> m >> s >> t >> u >> v; s--;t--;u--;v--; g.resize(n); for(int i = 0; i<m; i++){ int a, b, c; cin >> a >> b >> c; a--;b--; g[a].push_back({b, c}); g[b].push_back({a, c}); } auto dst = d1(u); cout << min(dst[v], d2()) << endl; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...