Submission #1150586

#TimeUsernameProblemLanguageResultExecution timeMemory
1150586nguynCommuter Pass (JOI18_commuter_pass)C++20
100 / 100
320 ms78836 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #define endl '\n' #define pii pair<int, int> #define F first #define S second #define pb push_back const int N = 2e5 + 5; const int inf = 1e18; int n, m; vector<pii> g[N]; int a, b, c, dd; int d[4 * N]; int da[N]; int db[N]; vector<pii> gr[4 * N]; priority_queue<pii, vector<pii>, greater<pii>> pq; signed main() { ios_base::sync_with_stdio(0); cin.tie(0); if (fopen("INP.INP" ,"r")) { freopen("INP.INP" ,"r" , stdin) ; freopen("OUT.OUT" , "w" , stdout) ; } cin >> n >> m; cin >> a >> b >> c >> dd; for (int i = 1; i <= m; i++) { int u, v, w; cin >> u >> v >> w; g[u].pb({v, w}); g[v].pb({u, w}); } for (int i = 1; i <= n; i++) { d[i] = inf; } d[a] = 0; pq.push({0, a}); while(!pq.empty()) { int du = pq.top().F; int u = pq.top().S; pq.pop(); if (du != d[u]) continue; for (auto it : g[u]) { int w = it.S; int v = it.F; if (d[v] > d[u] + w) { d[v] = d[u] + w; pq.push({d[v], v}); } } } for (int i = 1; i <= n; i++) { da[i] = d[i]; d[i] = inf; } d[b] = 0; pq.push({0, b}); while(!pq.empty()) { int du = pq.top().F; int u = pq.top().S; pq.pop(); if (du != d[u]) continue; for (auto it : g[u]) { int w = it.S; int v = it.F; if (d[v] > d[u] + w) { d[v] = d[u] + w; pq.push({d[v], v}); } } } for (int i = 1; i <= n; i++) { db[i] = d[i]; } for (int u = 1; u <= n; u++) { gr[u].pb({n + u, 0}); gr[u].pb({2 * n + u, 0}); gr[n + u].pb({3 * n + u, 0}); gr[2 * n + u].pb({3 * n + u, 0}); for (auto it : g[u]) { int v = it.F; int w = it.S; if (da[u] + w + db[v] == da[b]) { gr[n + u].pb({n + v, 0}); gr[2 * n + v].pb({2 * n + u, 0}); } gr[u].pb({v, w}); gr[3 * n + u].pb({3 * n + v, w}); } } for (int i = 1; i <= 4 * n; i++) d[i] = inf; d[c] = 0; pq.push({0, c}); while(!pq.empty()) { int du = pq.top().F; int u = pq.top().S; pq.pop(); if (du != d[u]) continue; for (auto it : gr[u]) { int v = it.F; int w = it.S; if (d[v] > d[u] + w) { d[v] = d[u] + w; pq.push({d[v], v}); } } } cout << d[3 * n + dd]; }

Compilation message (stderr)

commuter_pass.cpp: In function 'int main()':
commuter_pass.cpp:27:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   27 |         freopen("INP.INP" ,"r" , stdin) ;
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
commuter_pass.cpp:28:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   28 |         freopen("OUT.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...