#include #include #include using namespace std; using ll = long long; using P = pair; int N; vector> G; vector visited; ll max_dist = 0; int far_node = 0; void dfs(int node, ll dist) { visited[node] = true; if (dist > max_dist) { max_dist = dist; far_node = node; } for (auto [to, w] : G[node]) { if (!visited[to]) { dfs(to, dist + w); } } } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); cin >> N; G.resize(N + 1); // 1-indexed for (int i = 0; i < N - 1; ++i) { int u, v; ll w; cin >> u >> v >> w; G[u].emplace_back(v, w); G[v].emplace_back(u, w); } // 1回目のDFS visited.assign(N + 1, false); max_dist = 0; dfs(1, 0); // 2回目のDFS visited.assign(N + 1, false); max_dist = 0; dfs(far_node, 0); cout << max_dist << '\n'; return 0; }