Submission #963089

#TimeUsernameProblemLanguageResultExecution timeMemory
963089toast12Commuter Pass (JOI18_commuter_pass)C++14
0 / 100
369 ms25640 KiB
#include <bits/stdc++.h> using namespace std; const long long INF = 1e18; int n, m; int s, t, u, v; vector<vector<pair<int, long long>>> adj; vector<vector<int>> p; vector<bool> on_path; vector<bool> processed; void dfs(int cur) { if (processed[cur]) return; on_path[cur] = true; processed[cur] = true; for (auto x : p[cur]) { dfs(x); } } void dijkstras(vector<vector<int>> &parent, vector<long long> &dist, int start) { priority_queue<pair<int, int>> pq; pq.push({0, start}); while (!pq.empty()) { int x = pq.top().second; pq.pop(); for (auto e : adj[x]) { long long w = e.second; if (w + dist[x] < dist[e.first]) { parent[e.first].push_back(x); dist[e.first] = dist[x]+w; pq.push({-dist[e.first], e.first}); } } } } int main() { cin >> n >> m; adj.resize(n+1); p.resize(n+1); processed.resize(n+1); on_path.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); for (auto x : p[t]) { dfs(x); } vector<vector<int>> temp(n+1); vector<long long> dv(n+1, INF); dv[v] = 0; dijkstras(temp, dv, v); long long ans = INF; long long mnv = INF; for (int i = 1; i <= n; i++) { if (!on_path[i]) continue; mnv = min(mnv, dv[i]); ans = min(ans, mnv); } cout << ans << '\n'; 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...