Submission #963802

#TimeUsernameProblemLanguageResultExecution timeMemory
963802raspyCommuter Pass (JOI18_commuter_pass)C++14
100 / 100
536 ms35388 KiB
#include <bits/stdc++.h> #define inf 1'000'000'000'000'000 #define int long long using namespace std; typedef pair<int, int> ii; vector<ii> graf[100005]; int du[100005]; int dv[100005]; int ds[100005]; int dp[5][100005]; int rez = 0; bool ob[100005]; void dijkstra1(int start, int arr[]) { memset(ob, false, sizeof(ob)); priority_queue<ii, vector<ii>, greater<ii>> pq; pq.push({0, start}); while (!pq.empty()) { auto [d, u] = pq.top(); pq.pop(); if (ob[u]) continue; arr[u] = d; ob[u] = 1; for (auto [v, w] : graf[u]) pq.push({d + w, v}); } } void dijkstra2(int start, int end) { memset(dp, -1, sizeof(dp)); memset(ob, false, sizeof(ob)); priority_queue<tuple<int, int, int>, vector<tuple<int, int, int>>, greater<tuple<int, int, int>>> pq; pq.push({0, start, 0}); dp[0][0] = dp[1][0] = inf; while (!pq.empty()) { auto [d, u, par] = pq.top(); pq.pop(); if (!ob[u]) { ob[u] = 1; ds[u] = d; dp[0][u] = min(du[u], dp[0][par]); dp[1][u] = min(dv[u], dp[1][par]); for (auto [v, w] : graf[u]) pq.push({d + w, v, u}); } else if (d == ds[u]) { if (min(du[u], dp[0][par]) + min(dv[u], dp[1][par]) <= dp[0][u] + dp[1][u]) { dp[0][u] = min(du[u], dp[0][par]); dp[1][u] = min(dv[u], dp[1][par]); } } } rez = min(rez, dp[0][end] + dp[1][end]); } int32_t main() { int n, m, s, t, u, v; cin >> n >> m >> s >> t >> u >> v; for (int i = 0; i < m; i++) { int a, b, c; cin >> a >> b >> c; graf[a].push_back({b, c}); graf[b].push_back({a, c}); } dijkstra1(u, du); dijkstra1(v, dv); rez = du[v]; dijkstra2(s, t); dijkstra2(t, s); cout << rez << '\n'; return 0; }

Compilation message (stderr)

commuter_pass.cpp: In function 'void dijkstra1(long long int, long long int*)':
commuter_pass.cpp:25:8: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
   25 |   auto [d, u] = pq.top();
      |        ^
commuter_pass.cpp:31:13: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
   31 |   for (auto [v, w] : graf[u])
      |             ^
commuter_pass.cpp: In function 'void dijkstra2(long long int, long long int)':
commuter_pass.cpp:45:8: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
   45 |   auto [d, u, par] = pq.top();
      |        ^
commuter_pass.cpp:53:14: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
   53 |    for (auto [v, w] : graf[u])
      |              ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...