結果
| 問題 |
No.763 Noelちゃんと木遊び
|
| コンテスト | |
| ユーザー |
neterukun
|
| 提出日時 | 2021-02-15 01:30:28 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 299 ms / 2,000 ms |
| コード長 | 1,009 bytes |
| コンパイル時間 | 170 ms |
| コンパイル使用メモリ | 82,244 KB |
| 実行使用メモリ | 106,368 KB |
| 最終ジャッジ日時 | 2025-03-22 10:39:07 |
| 合計ジャッジ時間 | 6,326 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 22 |
ソースコード
def topological_sorted(tree, root=None):
n = len(tree)
par = [-1] * n
tp_order = []
for v in range(n):
if par[v] != -1 or (root is not None and v != root):
continue
stack = [v]
while stack:
v = stack.pop()
tp_order.append(v)
for nxt_v in tree[v]:
if nxt_v == par[v]:
continue
par[nxt_v] = v
stack.append(nxt_v)
return tp_order, par
n = int(input())
edges = [list(map(int, input().split())) for i in range(n - 1)]
tree = [[] for i in range(n)]
for u, v in edges:
u -= 1
v -= 1
tree[u].append(v)
tree[v].append(u)
tp_order, par = topological_sorted(tree, 0)
dp0 = [0] * n
dp1 = [0] * n
for v in tp_order[::-1]:
for nxt_v in tree[v]:
if nxt_v == par[v]:
continue
dp0[v] += max(dp0[nxt_v], dp1[nxt_v])
dp1[v] += max(dp0[nxt_v], dp1[nxt_v] - 1)
dp1[v] += 1
print(max(max(dp0), max(dp1)))
neterukun