結果
問題 |
No.3206 う し た ウ ニ 木 あ く ん 笑
|
ユーザー |
|
提出日時 | 2025-05-27 16:28:07 |
言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
結果 |
AC
|
実行時間 | 1,532 ms / 3,000 ms |
コード長 | 821 bytes |
コンパイル時間 | 681 ms |
コンパイル使用メモリ | 12,160 KB |
実行使用メモリ | 178,684 KB |
最終ジャッジ日時 | 2025-07-16 01:14:39 |
合計ジャッジ時間 | 23,135 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
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))