Submission #530502

#TimeUsernameProblemLanguageResultExecution timeMemory
530502SlavicGCommuter Pass (JOI18_commuter_pass)C++17
31 / 100
358 ms25808 KiB
#include "bits/stdc++.h" using namespace std; #define ll long long #define forn(i,n) for(int i=0;i<n;i++) #define all(v) v.begin(), v.end() #define rall(v) v.rbegin(),v.rend() #define pb push_back #define sz(a) (int)a.size() #define int long long const int N = 2e5 + 10; vector<pair<int, int>> adj[N]; vector<ll> dijkstra(int a, int n) { priority_queue<pair<int,int>> q; vector<int> dist(n, (ll)1e18); vector<bool> vis(n, false); dist[a] = 0; q.push({0, a}); while(!q.empty()) { int u = q.top().second; q.pop(); if(vis[u]) continue; vis[u] = true; for(auto x: adj[u]) { int w = x.second, v = x.first; if(dist[v] > dist[u] + w) { dist[v] = dist[u] + w; q.push({-dist[v], v}); } } } return dist; } void solve() { int n, m, s, t, a, b; cin >> n >> m >> s >> t >> a >> b; --s, --t, --a, --b; for(int i = 0;i < m; ++i) { int u, v, c; cin >> u >> v >> c; --u, --v; adj[u].pb({v, c}); adj[v].pb({u, c}); } vector<ll> distA = dijkstra(a, n), distB = dijkstra(b, n); vector<ll> distS = dijkstra(s, n), distT = dijkstra(t, n); ll ans = distA[b]; if(s == a) { for(int i = 0;i < n; ++i) { if(distS[i] + distT[i] == distS[t]) { ans = min(ans, distB[i]); } } cout << ans << "\n"; return; } priority_queue<pair<int,int>> q; vector<int> dist(n, (ll)1e18); vector<bool> vis(n, false); dist[a] = 0; q.push({0, a}); while(!q.empty()) { int u = q.top().second; q.pop(); if(vis[u]) continue; vis[u] = true; for(auto x: adj[u]) { int w = x.second, v = x.first; if(distS[u] + distT[u] == distS[t] && distS[v] + distT[v] == distS[t]) w = 0; if(dist[v] > dist[u] + w) { dist[v] = dist[u] + w; q.push({-dist[v], v}); } } } cout << dist[b] << "\n"; } int32_t main() { ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0); 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...