Submission #834629

#TimeUsernameProblemLanguageResultExecution timeMemory
834629vjudge1Commuter Pass (JOI18_commuter_pass)C++17
31 / 100
334 ms27876 KiB
#include <bits/stdc++.h> using namespace std; #define task "code" #define ll long long #define pi pair<long long, int> const int maxn = 1e5 + 1; int n, m, S, T, U, V, u, v, w; vector<pi> adj[maxn]; long long d[4][maxn], miU[maxn], miV[maxn], res; priority_queue< pi, vector<pi>, greater<pi> > pq; bool vs[maxn]; void dijktra (int p, int pr) { d[p][pr] = 0; pq.push({0, pr}); while (!pq.empty()) { long long tmp = pq.top().first; u = pq.top().second; pq.pop(); if (tmp > d[p][u]) continue; for (pi x : adj[u]) { tie(w, v) = x; if (d[p][v] > d[p][u] + w) d[p][v] = d[p][u] + w, pq.push({d[p][v], v}); } } } void dfs (int u) { vs[u] = 1; res = min(res, miU[u] + miV[u]); for (auto x : adj[u]) { tie(w, v) = x; if (d[0][u] + w + d[1][v] == d[0][T] && vs[v] == 0) { miU[v] = min(miU[u], d[2][v]); miV[v] = min(miV[u], d[3][v]); dfs(v); } } miU[u] = miV[u] = 1e18; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> n >> m >> S >> T >> U >> V; for (int i = 1; i <= m; ++ i) { cin >> u >> v >> w; adj[u].push_back({w, v}); adj[v].push_back({w, u}); } for (int i = 1; i <= n; ++ i) for (int j = 0; j < 4; ++ j) d[j][i] = 1e17; dijktra(0, S); dijktra(1, T); dijktra(2, U); dijktra(3, V); res = d[2][V]; memset(miU, 0x3f, sizeof miU); memset(miV, 0x3f, sizeof miV); miU[S] = d[2][S]; miV[S] = d[3][S]; dfs(S); cout << res; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...