Submission #963106

#TimeUsernameProblemLanguageResultExecution timeMemory
963106toast12Commuter Pass (JOI18_commuter_pass)C++14
15 / 100
2023 ms30652 KiB
#include <bits/stdc++.h> using namespace std; const long long INF = 1e18; int n, m; int s, t, u, v; long long ans; vector<vector<pair<int, long long>>> adj; vector<vector<int>> p; vector<bool> visited; vector<bool> processed; vector<int> path; vector<long long> dv, du; void dijkstras(vector<vector<int>> &parent, vector<long long> &dist, int start) { priority_queue<pair<long long, int>> pq; pq.push({0, start}); while (!pq.empty()) { int x = pq.top().second; pq.pop(); if (visited[x]) continue; visited[x] = true; for (auto e : adj[x]) { long long w = e.second; if (w + dist[x] < dist[e.first]) { parent[e.first].clear(); parent[e.first].push_back(x); dist[e.first] = dist[x]+w; pq.push({-dist[e.first], e.first}); } else if (w + dist[x] == dist[e.first]) { parent[e.first].push_back(x); } } } } void evaluate() { long long mnu = INF, mnv = INF; for (auto node : path) { mnu = min(mnu, du[node]); mnv = min(mnv, dv[node]); ans = min(ans, mnu+mnv); } } void find_path() { if (path.back() == s) { evaluate(); return; } for (auto x : p[path.back()]) { path.push_back(x); find_path(); path.pop_back(); } } int main() { cin >> n >> m; adj.resize(n+1); p.resize(n+1); processed.resize(n+1); visited.resize(n+1); cin >> s >> t >> u >> v; for (int i = 0; i < m; i++) { int x, y; long long w; cin >> x >> y >> w; adj[x].push_back({y, w}); adj[y].push_back({x, w}); } p[s].push_back(s); vector<long long> d(n+1, INF); d[s] = 0; dijkstras(p, d, s); vector<vector<int>> temp(n+1); dv.resize(n+1, INF); dv[v] = 0; fill(visited.begin(), visited.end(), false); dijkstras(temp, dv, v); du.resize(n+1, INF); du[u] = 0; fill(visited.begin(), visited.end(), false); dijkstras(temp, du, u); ans = du[v]; long long mnv = INF, mnu = INF; path.push_back(t); find_path(); cout << ans << '\n'; return 0; }

Compilation message (stderr)

commuter_pass.cpp: In function 'int main()':
commuter_pass.cpp:90:15: warning: unused variable 'mnv' [-Wunused-variable]
   90 |     long long mnv = INF, mnu = INF;
      |               ^~~
commuter_pass.cpp:90:26: warning: unused variable 'mnu' [-Wunused-variable]
   90 |     long long mnv = INF, mnu = INF;
      |                          ^~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...