제출 #412698

#제출 시각아이디문제언어결과실행 시간메모리
412698LastRonin구슬과 끈 (APIO14_beads)C++14
28 / 100
1081 ms12876 KiB
#include <bits/stdc++.h> #define speed ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0); #define ll long long #define pb push_back #define mp make_pair #define f first #define s second #define pill pair<ll, ll> using namespace std; const ll N = 5e5 + 10; const ll big = 1e18; ll n; vector<pill> g[N]; ll dp[N][2], dp2[2][3], dp3[2][2]; ll dfs(ll v, ll p, ll z) { dp[v][0] = dp[v][1] = 0; for(auto u : g[v]) { if(u.f != p) dfs(u.f, v, u.s); } dp2[0][0] = 0, dp2[0][1] = -big, dp2[0][2] = -big; for(auto u : g[v]) { if(u.f == p)continue; dp2[1][0] = dp2[0][0] + max(dp[u.f][0], dp[u.f][1]); dp2[1][1] = max(dp2[0][1] + max(dp[u.f][0], dp[u.f][1]), dp2[0][0] + dp[u.f][0] + u.s); dp2[1][2] = max(dp2[0][2] + max(dp[u.f][0], dp[u.f][1]), dp2[0][1] + dp[u.f][0] + u.s); dp2[0][0] = dp2[1][0]; dp2[0][1] = dp2[1][1]; dp2[0][2] = dp2[1][2]; } dp[v][0] = dp2[0][0]; dp[v][1] = dp2[0][1] + z; return dp2[0][2]; } int main() { speed; cin >> n; for(ll i = 1, a, b, c; i < n; i++) cin >> a >> b >> c, g[a].pb(mp(b, c)), g[b].pb(mp(a, c)); ll ans = 0; for(int i = 1; i <= n; i++) ans = max(ans, dfs(i, 0, 0)); cout << ans; } /* 10 5 6 9 2 3 5 1 10 8 4 5 9 2 7 8 5 7 10 6 9 4 2 8 9 1 7 5 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...