結果
問題 |
No.3113 The farthest point
|
ユーザー |
![]() |
提出日時 | 2025-04-19 07:27:23 |
言語 | PyPy3 (7.3.15) |
結果 |
WA
|
実行時間 | - |
コード長 | 1,167 bytes |
コンパイル時間 | 625 ms |
コンパイル使用メモリ | 82,304 KB |
実行使用メモリ | 128,680 KB |
最終ジャッジ日時 | 2025-04-19 07:27:37 |
合計ジャッジ時間 | 11,393 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 31 WA * 2 |
ソースコード
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)