Submission #124606

#TimeUsernameProblemLanguageResultExecution timeMemory
124606jakob_noglerBeads and wires (APIO14_beads)C++14
0 / 100
6 ms5112 KiB
#include <bits/stdc++.h> #define fi first #define se second using namespace std; typedef pair<int, int> pii; typedef vector<pii> vpii; const int N = 200005; const int inf = numeric_limits<int>::max(); vpii t[N]; int n, a, b, w; pii dp[N]; // first is without, second is with void dfs(int v, int f, int val){ int sum = 0, mx0 = - inf, mx1 = - inf; for(auto u : t[v]) if(u.fi != f){ dfs(u.fi, v, u.se); int curr = max(dp[u.fi].fi, dp[u.fi].se); sum += curr; if(u.se - curr + dp[u.fi].fi > mx0) mx1 = mx0, mx0 = u.se - curr + dp[u.fi].fi; else if(u.se - curr + dp[u.fi].fi > mx1) mx1 = u.se - curr + dp[u.fi].fi; } dp[v].fi = sum; if(mx1 != - inf) dp[v].fi = max(mx1 + mx0, 0) + sum; if(mx0 != - inf && f != - 1) dp[v].se = sum + mx0 + val; } int main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); cin >> n; for(int i = 0; i < n - 1; i++){ cin >> a >> b >> w; t[a - 1].push_back({b - 1, w}); t[b - 1].push_back({a - 1, w}); } dfs(0, - 1, 0); cout << dp[0].fi << endl; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...