제출 #734260

#제출 시각아이디문제언어결과실행 시간메모리
734260Alihan_8구슬과 끈 (APIO14_beads)C++17
0 / 100
0 ms212 KiB
#include <bits/stdc++.h> using namespace std; #define all(x) x.begin(), x.end() #define pb push_back #define ln '\n' #define int long long template <class _T> bool chmin(_T &x, const _T &y){ bool flag = false; if ( x > y ){ x = y; flag |= true; } return flag; } template <class _T> bool chmax(_T &x, const _T &y){ bool flag = false; if ( x < y ){ x = y; flag |= true; } return flag; } signed main(){ ios_base::sync_with_stdio(false); cin.tie(nullptr); int n; cin >> n; vector <pair<int,int>> g[n]; for ( int i = 1; i < n; i++ ){ int x, y, w; cin >> x >> y >> w; g[--x].pb({--y, w}); g[y].pb({x, w}); } const int inf = 1e15 + 1; vector <array<int,2>> dp(n, {-inf, -inf}); function <void(int,int,int)> dfs = [&](int x, int par, int prev){ int cnt = 0, l = -inf, r = -inf; for ( auto [to, w]: g[x] ){ if ( to == par ) continue; dfs(to, x, w); cnt += dp[to][1]; int v = dp[to][0] - dp[to][1] + w; if ( l <= v ){ r = l; l = v; } else chmax(r, v); } dp[x][0] = max(cnt, cnt + l + r); dp[x][1] = l + cnt + prev; chmax(dp[x][1], dp[x][0]); }; dfs(0, 0, 0); cout << dp[0][0]; cout << '\n'; } /* 10 4 10 2 1 2 21 1 3 13 6 7 1 7 9 5 2 4 3 2 5 8 1 6 55 6 8 34 */
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...