import sys try: sys.setrecursionlimit(2 * 10**5 + 10) except Exception as e: print(f"再帰の深度の設定失敗。{e}", file=sys.stderr) def dfs(start_node, graph): distances = {} max_dist = -float('inf') farthest_node = start_node stack = [(start_node, 0)] visited_for_dist_calc = {} while stack: u, dist_u = stack.pop() if u in visited_for_dist_calc and visited_for_dist_calc[u] >= dist_u: continue visited_for_dist_calc[u] = dist_u distances[u] = dist_u if dist_u > max_dist: max_dist = dist_u farthest_node = u if u not in graph: continue for v, weight in graph[u]: new_dist_v = dist_u + weight if v not in visited_for_dist_calc or new_dist_v > visited_for_dist_calc[v]: stack.append((v, new_dist_v)) final_farthest_node = start_node final_max_dist = -float('inf') for node, dist in distances.items(): if dist > final_max_dist: final_max_dist = dist final_farthest_node = node return final_farthest_node, final_max_dist def solve(): n = int(sys.stdin.readline()) if n == 1: print(0) return adj = {} nodes = set() for _ in range(n - 1): u, v, w = map(int, sys.stdin.readline().split()) if u not in adj: adj[u] = [] if v not in adj: adj[v] = [] adj[u].append((v, w)) adj[v].append((u, w)) nodes.add(u) nodes.add(v) if not nodes: print(0) return start_node = 1 farthest_node_u, _ = dfs(start_node, adj) _, diameter = dfs(farthest_node_u, adj) print(diameter) if __name__ == "__main__": solve()