#include #include #include #include using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); long long n; cin >> n; vector>> graph(n + 1); // 1-indexed for (long long i = 0; i < n - 1; ++i) { long long u, v, w; cin >> u >> v >> w; graph[u].emplace_back(v, w); graph[v].emplace_back(u, w); } vector parent(n + 1, 0); vector order; stack s; s.push(1); parent[1] = -1; while (!s.empty()) { long long u = s.top(); s.pop(); order.push_back(u); for (auto [v, w] : graph[u]) { if (parent[v] == 0) { parent[v] = u; s.push(v); } } } vector best_down(n + 1, 0); long long answer = 0; for (long long i = n - 1; i >= 0; --i) { long long u = order[i]; long long first = 0, second = 0; for (auto [v, w] : graph[u]) { if (v == parent[u]) continue; long long c = best_down[v] + w; if (c > first) { second = first; first = c; } else if (c > second) { second = c; } } first = max(0LL, first); second = max(0LL, second); answer = max(answer, first + second); best_down[u] = first; } cout << answer << '\n'; return 0; }