結果

問題 No.3113 The farthest point
ユーザー keigo kuwata
提出日時 2025-04-20 18:15:00
言語 Python3
(3.13.1 + numpy 2.2.1 + scipy 1.14.1)
結果
WA  
実行時間 -
コード長 1,466 bytes
コンパイル時間 559 ms
コンパイル使用メモリ 12,416 KB
実行使用メモリ 106,240 KB
最終ジャッジ日時 2025-04-20 18:15:30
合計ジャッジ時間 29,632 ms
ジャッジサーバーID
(参考情報)
judge3 / judge1
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 20 WA * 13
権限があれば一括ダウンロードができます

ソースコード

diff #

def find_diameter(n, edges):
    # グラフの作成
    graph = [[] for _ in range(n+1)]
    for u, v, w in edges:
        graph[u].append((v, w))
        graph[v].append((u, w))
    
    # 任意の頂点からの最長パスを見つける関数
    def find_farthest(start):
        dist = [-float('inf')] * (n+1)
        dist[start] = 0
        visited = [False] * (n+1)
        
        def dfs(node):
            visited[node] = True
            for neighbor, weight in graph[node]:
                if not visited[neighbor]:
                    dist[neighbor] = max(dist[neighbor], dist[node] + weight)
                    dfs(neighbor)
        
        dfs(start)
        
        # 最大距離とその頂点を見つける
        max_dist = -float('inf')
        max_node = start
        for i in range(1, n+1):
            if dist[i] > max_dist:
                max_dist = dist[i]
                max_node = i
        
        return max_node, max_dist
    
    # 頂点1から最も遠い頂点を見つける
    farthest_node, _ = find_farthest(1)
    
    # その頂点から最も遠い頂点を見つける
    _, max_distance = find_farthest(farthest_node)
    
    # 負の場合は0を返す(パスを選ばない)
    return max(0, max_distance)

# 入力を読み込む
n = int(input())
edges = []
for _ in range(n-1):
    u, v, w = map(int, input().split())
    edges.append((u, v, w))

# 結果を出力
print(find_diameter(n, edges))
0