Submission #1253203

#TimeUsernameProblemLanguageResultExecution timeMemory
1253203enxiayyCommuter Pass (JOI18_commuter_pass)C++20
100 / 100
187 ms27324 KiB
#include <bits/stdc++.h> #define fi first #define se second #define all(x) x.begin(), x.end() #define compact(v) v.erase(unique(all(v)), v.end()) #define dbg(v) "[" #v " = " << (v) << "]" #define el "\n" using namespace std; typedef long long ll; mt19937_64 rng(chrono::high_resolution_clock::now().time_since_epoch().count()); long long randRange(long long l, long long r){ return uniform_int_distribution<long long>(l,r)(rng); } const int N = 2e5 + 5; const ll INF = 1e18; int n, m; int s, t, u, v; vector < pair<int, ll> > adj[N]; ll distS[N], distT[N], distU[N], distV[N]; bool vis[N]; ll dpU[N], dpV[N]; void dijk(int st, ll dist[]) { priority_queue < pair<ll, int>, vector < pair<ll, int> >, greater < pair < ll, int> > > pq; for(int i = 1; i <= n; ++i) dist[i] = INF; dist[st] = 0; pq.push({0, st}); while(!pq.empty()) { int u = pq.top().se; ll cost = pq.top().fi; pq.pop(); if (cost > dist[u]) continue; for(auto s : adj[u]) { if (dist[s.fi] > dist[u] + s.se) { dist[s.fi] = dist[u] + s.se; pq.push({dist[s.fi], s.fi}); } } } } ll ans = INF; void f(int u) { vis[u] = 1; dpU[u] = dpV[u] = INF; for(auto s : adj[u]) { if (distS[u] + distT[s.fi] + s.se != distS[t]) continue; if (!vis[s.fi]) f(s.fi); dpU[u] = min(dpU[u], dpU[s.fi]); dpV[u] = min(dpV[u], dpV[s.fi]); } ans = min({ans, dpU[u] + distV[u], dpV[u] + distU[u]}); dpU[u] = min(dpU[u], distU[u]); dpV[u] = min(dpV[u], distV[u]); } void solve() { cin >> n >> m; cin >> s >> t >> u >> v; while(m--) { int u, v; ll c; cin >> u >> v >> c; adj[u].push_back({v, c}); adj[v].push_back({u, c}); } dijk(s, distS); dijk(t, distT); dijk(u, distU); dijk(v, distV); f(s); ans = min(ans, distU[v]); cout << ans << el; } signed main() { ios_base::sync_with_stdio(false); cin.tie(0); #define task "task" if(fopen(task".inp", "r")) { freopen(task".inp", "r", stdin); freopen(task".out", "w", stdout); } solve(); return 0; } /* */

Compilation message (stderr)

commuter_pass.cpp: In function 'int main()':
commuter_pass.cpp:90:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   90 |         freopen(task".inp", "r", stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
commuter_pass.cpp:91:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   91 |         freopen(task".out", "w", stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...