from collections import defaultdict, deque def tree_diameter_with_weight(n: int, adj: defaultdict) -> tuple[int, list]: def bfs(start): q = deque([start]) dists = [-1] * n dists[start] = 0 while q: v = q.popleft() for to, w in adj[v]: if dists[to] != -1: continue dists[to] = dists[v] + w q.append(to) return dists dists = bfs(0) _, ai = max((d, i) for i, d in enumerate(dists)) dists = bfs(ai) d, bi = max((d, i) for i, d in enumerate(dists)) path = [(bi, d)] # (頂点番号, 距離) while path[-1][1] > 0: v, s = path[-1] for to, w in adj[v]: if dists[to] == s - w: path.append((to, s - w)) break else: assert False return d, [v for v, _ in path] N = int(input()) adj = defaultdict(list) max_w = 0 for _ in range(N-1): u, v, w = map(int, input().split()) u -= 1 v -= 1 adj[u].append((v, w)) adj[v].append((u, w)) max_w = max(max_w, w) d, _ = tree_diameter_with_weight(N, adj) ans = max(d, max_w) print(ans)