Submission #1142247

#TimeUsernameProblemLanguageResultExecution timeMemory
1142247ray1457Commuter Pass (JOI18_commuter_pass)C++20
0 / 100
118 ms21720 KiB
#include <bits/stdc++.h> using namespace std; #define pii pair<int,int> #define vi vector<int> #define ff first #define ss second #define ll long long #define int ll const int INF = 1e9; void solve() { int n,m,s,t,u,v; cin >> n >> m >> s >> t >> u >> v; vector<pii> adj[n+1]; for (int i = 0; i<m; i++) { int a,b,c; cin >> a >> b >> c; adj[a].push_back({b,c}); adj[b].push_back({a,c}); } set<int> path; priority_queue<pii, vector<pii>, greater<pii>> pq; vector<bool> vis(n+1, false); vi d(n+1, INF); vi p(n+1, -1); d[s] = 0; pq.push({0, s}); while (!pq.empty()) { int x = pq.top().ss; pq.pop(); if (vis[x]) continue; vis[x] = true; for (auto ed : adj[x]) { int nd = ed.ff; int w = ed.ss; if (d[nd] > d[x] + w) { d[nd] = d[x] + w; pq.push({d[nd], nd}); p[nd] = x; } } } for (int i = t; i != s; i = p[i]) path.insert(i); path.insert(s); vector<bool> rch_u(n+1, false); vis.assign(n+1, false); function<void(int)> dfs = [&] (int x) { if (vis[x]) return ; vis[x] = true; rch_u[x] = true; for (auto [nd, w] : adj[x]) { dfs(nd); } }; dfs(u); vis.assign(n+1, false); d.assign(n+1, INF); d[v] = 0; queue<int> q; q.push(v); while (!q.empty()) { int x = q.front(); q.pop(); if (vis[x]) continue; vis[x] = true; for (auto [nd, w] : adj[x]) { d[nd] = min(d[nd], d[x] + w); q.push(nd); } } int ans = d[u]; for (auto nd : path) { if (rch_u[nd]) { ans = min(ans, d[nd]); } } cout << ans << endl; } signed main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); int t = 1; // cin >> t; while (t--) { solve(); } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...