#include using namespace std; using ll = long long; bool chmax(ll &a, ll b) { if (a < b) { a = b; return 1; } return 0; } int main() { cin.tie(0)->sync_with_stdio(0); int N; cin >> N; using edge = pair; vector G(N, vector()); for (int i = 0; i < N - 1; i++) { int U, V; ll C; cin >> U >> V >> C; --U, --V; G[U].push_back(edge{V, C}); G[V].push_back(edge{U, C}); } vector d(N, -1), p(N, -1); vector pw(N, 0ll); using al2 = array; vector child(N, al2{0, -1}); auto top2 = [](al2 &a, ll v) { if (v > a[0]) { a[1] = a[0]; a[0] = v; } else if (v > a[1]) { a[1] = v; } }; stack> dfs; dfs.push(0); ll ans = 0; while (dfs.size()) { int v = dfs.top(); dfs.pop(); for (int &i = ++d[v]; i < G[v].size(); i++) { auto [v2, w] = G[v][i]; if (v2 != p[v]) { dfs.push(v); dfs.push(v2); p[v2] = v; pw[v2] = w; break; } } if (d[v] == G[v].size()) { auto &c = child[v]; chmax(ans, c[0] + c[1]); if (p[v] != -1) { top2(child[p[v]], c[0] + pw[v]); } } } cout << ans << '\n'; }