Submission #587108

#TimeUsernameProblemLanguageResultExecution timeMemory
587108usuyusDreaming (IOI13_dreaming)C++14
100 / 100
92 ms21276 KiB
#include "dreaming.h" #include <bits/stdc++.h> using namespace std; int travelTime(int N, int M, int L, int A[], int B[], int T[]) { vector<vector<array<int, 2>>> fore(N); for (int i=0; i<M; i++) { fore[A[i]].push_back({B[i], T[i]}); fore[B[i]].push_back({A[i], T[i]}); } int ans = 0; vector<bool> vis(N); vector<int> len(N); function<int(int, int)> len_dfs = [&] (int nd, int par) { vis[nd] = true; int mx1 = 0, mx2 = 0; for (auto [cld, t] : fore[nd]) { if (cld == par) continue; int res = len_dfs(cld, nd) + t; if (res > mx1) swap(mx1, res); if (res > mx2) swap(mx2, res); } ans = max(ans, mx1 + mx2); return len[nd] = mx1; }; function<int(int, int, int)> best_dfs = [&] (int nd, int par, int top) { int mx1 = 0, mx2 = 0; int mx_cld = -1; int ret = max(top, len[nd]); // cout << nd << " -> " << ret << endl; for (auto [cld, t] : fore[nd]) { if (cld == par) continue; int res = len[cld] + t; if (res > mx1) swap(mx1, res), mx_cld = cld; if (res > mx2) swap(mx2, res); } for (auto [cld, t] : fore[nd]) { if (cld == par) continue; if (cld == mx_cld) { ret = min(ret, best_dfs(cld, nd, max(top, mx2) + t)); } else { ret = min(ret, best_dfs(cld, nd, max(top, mx1) + t)); } } return ret; }; vector<int> tails; for (int nd=0; nd<N; nd++) { if (vis[nd]) continue; len_dfs(nd, -1); tails.push_back(best_dfs(nd, -1, 0)); } sort(tails.rbegin(), tails.rend()); if (tails.size() >= 2) ans = max(ans, tails[0] + L + tails[1]); if (tails.size() >= 3) ans = max(ans, tails[1] + 2*L + tails[2]); return ans; }

Compilation message (stderr)

dreaming.cpp: In lambda function:
dreaming.cpp:22:19: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
   22 |         for (auto [cld, t] : fore[nd]) {
      |                   ^
dreaming.cpp: In lambda function:
dreaming.cpp:41:19: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
   41 |         for (auto [cld, t] : fore[nd]) {
      |                   ^
dreaming.cpp:49:19: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
   49 |         for (auto [cld, t] : fore[nd]) {
      |                   ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...