제출 #1083196

#제출 시각아이디문제언어결과실행 시간메모리
1083196beanCommuter Pass (JOI18_commuter_pass)C++17
0 / 100
78 ms12952 KiB
#include "bits/stdc++.h" using namespace std; int main() { cin.tie(0)->sync_with_stdio(0); int n, m, s, t, u, v; cin >> n >> m >> s >> t >> u >> v; --s; --t; --u; --v; vector<vector<pair<int, int>>> g(n); for (int i = 0; i < n; i++) { int x, y, w; cin >> x >> y >> w; --x; --y; g[x].emplace_back(y, w); g[y].emplace_back(x, w); } auto dijkstra = [&](int s) { priority_queue<pair<int64_t, int>, vector<pair<int64_t, int>>, greater<>> pq; const int64_t inf = int64_t(1e18); vector<int64_t> d(n, inf); pq.emplace(d[s] = 0, s); while (pq.size()) { int64_t d_v; int v; tie(d_v, v) = pq.top(); pq.pop(); for (auto &it : g[v]) { int u = it.first; int w = it.second; if (d[v] + w < d[u]) { pq.emplace(d[u] = d[v] + w, u); } } } return d; }; auto d_u = dijkstra(u); auto d_v = dijkstra(v); auto dijkstra2 = [&](int s, int t) { const int64_t inf = int64_t(1e18); vector<int64_t> dp_u(n, inf), dp_v(n, inf); vector<int64_t> d(n, inf); priority_queue<pair<int64_t, int>, vector<pair<int64_t, int>>, greater<>> pq; pq.emplace(d[s] = 0, s); dp_u[s] = d_u[s]; dp_v[s] = d_v[s]; while (pq.size()) { int64_t dv; int v; tie(dv, v) = pq.top(); pq.pop(); if (dv != d[v]) continue; for (auto &it : g[v]) { int u = it.first; int w = it.second; int64_t nx_u = min(dp_u[v], d_u[u]); int64_t nx_v = min(dp_v[v], d_v[u]); if (d[u] > d[v] + w) { dp_u[u] = nx_u; dp_v[u] = nx_v; pq.emplace(d[u] = d[v] + w, u); } else if (d[u] == d[v] + w) { if (nx_u + nx_v < dp_u[u] + dp_v[v]) { dp_u[u] = nx_u; dp_v[u] = nx_v; } } } } return dp_u[t] + dp_v[t]; }; int64_t res = d_u[v]; res = min(res, dijkstra2(s, t)); res = min(res, dijkstra2(t, s)); cout << res; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...