Submission #833992

#TimeUsernameProblemLanguageResultExecution timeMemory
833992vjudge1Commuter Pass (JOI18_commuter_pass)C++17
100 / 100
277 ms22156 KiB
#include <bits/stdc++.h> #define ll long long #define ii pair <ll, int> using namespace std; const int ar = 2e5+2; const ll oo = 1e15; int n, m, s, t, U, V; vector <ii> g[ar]; ii a[ar]; ll d[4][ar], f[ar], res = oo; priority_queue <ii, vector <ii>, greater <ii>> q; void dijkstra(int s, ll d[]) { for(int i = 1; i <= n; ++i) d[i] = oo; d[s] = 0; q.push({0, s}); while(q.size()) { ll val = q.top().first; int u = q.top().second; q.pop(); if(d[u] != val) continue; for(auto &[w, v] : g[u]) if(d[v] > d[u] + w) d[v] = d[u] + w, q.push({d[v], v}); } } void solve(int type) { int nt = type == 2 ? 3 : 2; for(int i = 1; i <= n; ++i) f[i] = d[nt][i]; for(int i = n; i >= 1; --i) { int u = a[i].second; for(auto &[w, v] : g[u]) if(d[0][u] + d[1][v] + w == d[0][t] && d[0][v] + d[1][v] == d[0][t]) f[u] = min(f[u], f[v]); } for(int i = 1; i <= n; ++i) res = min(res, f[i] + d[type][i]); } int main() { if(fopen("code.inp", "r")) { freopen("code.inp", "r", stdin); freopen("code.out", "w", stdout); } ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> n >> m; cin >> s >> t >> U >> V; for(int i = 1; i <= m; ++i) { int u, v, w; cin >> u >> v >> w; g[u].push_back({w, v}); g[v].push_back({w, u}); } dijkstra(s, d[0]); dijkstra(t, d[1]); dijkstra(U, d[2]); dijkstra(V, d[3]); for(int i = 1; i <= n; ++i) a[i] = {d[0][i], i}; sort(a + 1, a + n + 1); solve(2); solve(3); cout << res; return 0; }

Compilation message (stderr)

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