#include #include #include #include #include #include #include #include using namespace std; #define rep(i, n) for (int i = 0; i < (n); i++) typedef long long ll; template struct Edge { int to; T cost; }; template using WeightedGraph = vector>>; template T dfs(const WeightedGraph &g, int u, int parent, T &result) { T best1 = 0; T best2 = 0; for(auto &e : g[u]) { if(e.to == parent) continue; T child_best = dfs(g, e.to, u, result) + e.cost; if(child_best > best1) { best2 = best1; best1 = child_best; } else if(child_best > best2) { best2 = child_best; } } result = max(result, best1 + best2); return best1; } template< typename T > T tree_diameter(const WeightedGraph &g) { if (g.size() <= 1) return 0; T result = numeric_limits::lowest(); dfs(g, 0, -1, result); return result; } signed main() { int N; cin >> N; WeightedGraph g(N); rep(i, N - 1) { int u, v; ll w; cin >> u >> v >> w; u--; v--; g[u].emplace_back(Edge{v, w}); g[v].emplace_back(Edge{u, w}); } cout << tree_diameter(g) << endl; }