Submission #963076

#TimeUsernameProblemLanguageResultExecution timeMemory
963076toast12Commuter Pass (JOI18_commuter_pass)C++14
0 / 100
314 ms26240 KiB
#include <bits/stdc++.h> using namespace std; const long long INF = 1e15; int n, m; int s, t, u, v; vector<vector<pair<int, int>>> adj; vector<vector<int>> p; set<int> path; vector<bool> processed; void path_finder(int start) { if (processed[start]) return; path.insert(start); if (start == s) return; for (auto x : p[start]) { path_finder(x); } processed[start] = true; } 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]) { int 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); cin >> s >> t >> u >> v; for (int i = 0; i < m; i++) { int x, y, 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]) { path_finder(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 (auto node : path) { mnv = min(mnv, dv[node]); 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...