#include <bits/stdc++.h>
using namespace std;
#define pb push_back
const int N = 2e5 + 5;
int dp[N][2];
vector<array<int, 2>> g[N];
void dfs(int s, int e = -1) {
dp[s][0] = 0, dp[s][1] = 0;
int mx = -1e9;
for (auto [u, w] : g[s]) {
if (u == e) continue;
dfs(u, s);
dp[s][1] += max(dp[u][0], dp[u][1] + w), mx = max(mx, w + dp[u][0] - max(dp[u][0], dp[u][1] + w));
dp[s][0] += max(dp[u][0], dp[u][1] + w);
}
dp[s][1] += mx;
for (auto [u, wu] : g[s]) {
for (auto [v, wv] : g[s]) {
if (u == v || u == e || v == e ) continue;
mx = wu + wv + dp[u][0], dp[v][0];
for (auto [t, w] : g[s]) {
if (t == u || t == v || t == e) continue;
mx += max(dp[t][0], dp[t][1] + w);
}
dp[s][0] = max(dp[s][0], mx);
}
}
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
int n;
cin >> n;
for (int i = 1; i < n; ++i) {
int u, v, w;
cin >> u >> v >> w;
g[u].pb({v, w});
g[v].pb({u, w});
}
dfs(1);
cout << dp[1][0] << '\n';
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |