結果
問題 |
No.3206 う し た ウ ニ 木 あ く ん 笑
|
ユーザー |
|
提出日時 | 2025-05-28 01:55:19 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 1,609 ms / 3,000 ms |
コード長 | 821 bytes |
コンパイル時間 | 460 ms |
コンパイル使用メモリ | 82,404 KB |
実行使用メモリ | 395,112 KB |
最終ジャッジ日時 | 2025-07-16 01:14:33 |
合計ジャッジ時間 | 17,294 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 30 |
ソースコード
import sys sys.setrecursionlimit(int(1e7)) N = int(input()) G = [[] for _ in range(N)] for _ in range(N - 1): u, v = map(int, input().split()) u, v = u - 1, v - 1 G[u].append(v) G[v].append(u) dist = [0] * N def dfs1(u, par): for v in G[u]: if v == par: continue dfs1(v, u) dist[u] = max(dist[u], dist[v] + 1) def dfs2(u, d_par, par): far = [(0, -1)] for v in G[u]: if v == par: far.append((d_par + 1, v)) else: far.append((dist[v] + 1, v)) far.sort(reverse=True) ans, size = 0, len(far) for i in range(size): c, _ = far[i] ans = max(ans, 1 + (i + 1) * c) for v in G[u]: if v == par: continue ans = max(ans, dfs2(v, far[int(far[0][1] == v)][0], u)) return ans dfs1(0, -1) print(dfs2(0, 0, -1))