結果
問題 |
No.1928 Make a Binary Tree
|
ユーザー |
![]() |
提出日時 | 2025-06-12 15:07:19 |
言語 | PyPy3 (7.3.15) |
結果 |
WA
|
実行時間 | - |
コード長 | 1,736 bytes |
コンパイル時間 | 377 ms |
コンパイル使用メモリ | 82,640 KB |
実行使用メモリ | 174,524 KB |
最終ジャッジ日時 | 2025-06-12 15:08:39 |
合計ジャッジ時間 | 19,350 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 24 WA * 33 |
ソースコード
import sys from collections import deque def main(): sys.setrecursionlimit(1 << 25) n = int(sys.stdin.readline()) adj = [[] for _ in range(n+1)] for _ in range(n-1): x, y = map(int, sys.stdin.readline().split()) adj[x].append(y) adj[y].append(x) # Build the tree with parent and children parent = [0] * (n + 1) children = [[] for _ in range(n + 1)] visited = [False] * (n + 1) q = deque([1]) visited[1] = True while q: u = q.popleft() for v in adj[u]: if not visited[v] and v != parent[u]: parent[v] = u children[u].append(v) visited[v] = True q.append(v) # Iterative post-order traversal stack = [(1, False)] post_order = [] while stack: node, processed = stack.pop() if processed: post_order.append(node) else: stack.append((node, True)) # Push children in reverse order to process them in order for child in reversed(children[node]): stack.append((child, False)) candidates = {} for node in post_order: merged = [] for child in children[node]: merged.extend(candidates[child]) merged.sort(reverse=True) sum_size = sum(merged[:2]) if len(merged) >= 2 else sum(merged) size = sum_size + 1 new_candidates = [size] if len(merged) > 2: new_candidates.extend(merged[2:]) # Truncate to at most two elements new_candidates = new_candidates[:2] candidates[node] = new_candidates print(candidates[1][0]) if __name__ == '__main__': main()