Submission #31630

#TimeUsernameProblemLanguageResultExecution timeMemory
31630aomeBeads and wires (APIO14_beads)C++14
100 / 100
247 ms22380 KiB
#include <bits/stdc++.h> #define fi first #define se second using namespace std; typedef pair<int, int> ii; const int N = 200005; const int INF = -1e9; int n, res; int f[N][2], g[N][2]; int L[N], R[N]; vector<ii> G[N]; void dfs(int u, int p) { for (auto v : G[u]) { if (v.fi == p) continue; dfs(v.fi, u); } int mx = INF; for (auto v : G[u]) { if (v.fi == p) continue; int vMx = max(f[v.fi][0], f[v.fi][1] + v.se); f[u][0] += vMx; mx = max(mx, f[v.fi][0] + v.se - vMx); } f[u][1] = f[u][0] + mx; } void reDfs(int u, int p) { vector<ii> _G; for (auto v : G[u]) { if (v.fi == p) continue; _G.push_back(v); } int sz = _G.size(), sum = 0; L[0] = INF, R[sz + 1] = INF; for (int i = 1; i <= sz; ++i) { ii v = _G[i - 1]; sum += max(f[v.fi][0], f[v.fi][1] + v.se); int vMx = max(f[v.fi][0], f[v.fi][1] + v.se); L[i] = max(L[i - 1], f[v.fi][0] + v.se - vMx); } for (int i = sz; i >= 1; --i) { ii v = _G[i - 1]; int vMx = max(f[v.fi][0], f[v.fi][1] + v.se); R[i] = max(R[i + 1], f[v.fi][0] + v.se - vMx); } for (int i = 1; i <= sz; ++i) { ii v = _G[i - 1]; int mx = max(L[i - 1], R[i + 1]); int tSum = sum - max(f[v.fi][0], f[v.fi][1] + v.se); tSum += g[u][0], mx = max(mx, g[u][1] - g[u][0]); // f0 = tSum, f1 = tSum + mx; g[v.fi][0] = max(tSum, tSum + mx + v.second), g[v.fi][1] = tSum + v.second; } //cout << u << ' ' << f[u][0] << ' ' << f[u][1] << '\n'; //cout << u << ' ' << g[u][0] << ' ' << g[u][1] << '\n'; res = max(res, f[u][0] + g[u][0]); for (auto v : _G) reDfs(v.fi, u); } int main() { ios::sync_with_stdio(false); cin >> n; for (int i = 1; i < n; ++i) { int u, v, w; cin >> u >> v >> w; G[u].push_back(ii(v, w)); G[v].push_back(ii(u, w)); } dfs(1, 1); g[1][1] = INF; res = f[1][0]; reDfs(1, 1); cout << res; // int res = 0; // for (int i = 1; i <= n; ++i) { // dfs(i, i), res = max(res, f[i][0]); // } // cout << res; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...