#include using namespace std; using ll = long long; #define rep(i, s, e) for (int i = (int)(s); i < (int)(e); ++i) #define all(a) (a).begin(),(a).end() int main() { cin.tie(nullptr); ios_base::sync_with_stdio(false); int N; cin >> N; vector>> G(N); rep(i, 0, N - 1) { int u, v, w; cin >> u >> v >> w; --u, --v; G[u].push_back({v, w}); G[v].push_back({u, w}); } vector dist(N); vector seen(N, false); queue que; seen[0] = true; que.push(0); while (!que.empty()) { int v = que.front(); que.pop(); for (pair e : G[v]) { if (seen[e.first]) continue; seen[e.first] = true; dist[e.first] = dist[v] + e.second; que.push(e.first); } } int s = 0; ll maxD = 0; rep(i, 0, N) { if (maxD < dist[i]) { maxD = dist[i]; s = i; } } rep(i, 0, N) seen[i] = false; seen[s] = true; que.push(s); dist[s] = 0; while (!que.empty()) { int v = que.front(); que.pop(); for (pair e : G[v]) { if (seen[e.first]) continue; seen[e.first] = true; dist[e.first] = dist[v] + e.second; que.push(e.first); } } ll ans = 0; rep(i, 0, N) ans = max(ans, dist[i]); cout << ans << '\n'; }