#include using namespace std; using ll = long long; const ll LLINF = 1LL << 60; int main() { int N; cin >> N; vector>> G(N); for(int i = 0; i < N - 1; i++) { int u, v, w; cin >> u >> v >> w; u--, v--; G[u].emplace_back(v, w); G[v].emplace_back(u, w); } vector dp(N); auto dfs1 = [&](auto&& self, int u, int p) -> void { ll res = 0; for(auto [v, w] : G[u]) { if(v == p) continue; self(self, v, u); res = max(res, dp[v] + w); } dp[u] = res; }; dfs1(dfs1, 0, -1); vector ans(N); auto dfs2 = [&](auto&& self, int u, int p) -> void { ans[u] = dp[u]; int sz = G[u].size(); vector lmax(sz + 1, -LLINF); for(int i = 0; i < sz; i++) { auto [v, w] = G[u][i]; lmax[i + 1] = max(lmax[i], dp[v] + w); } vector rmax(sz + 1, -LLINF); for(int i = sz - 1; i >= 0; i--) { auto [v, w] = G[u][i]; rmax[i] = max(rmax[i + 1], dp[v] + w); } for(int i = 0; i < sz; i++) { auto [v, w] = G[u][i]; if(v == p) continue; ll dpu = dp[u], dpv = dp[v]; dp[u] = max(lmax[i], rmax[i + 1]); dp[v] = max(dp[v], dp[u] + w); self(self, v, u); dp[u] = dpu; dp[v] = dpv; } }; dfs2(dfs2, 0, -1); cout << (*max_element(ans.begin(), ans.end())) << endl; }