結果
| 問題 |
No.1928 Make a Binary Tree
|
| コンテスト | |
| ユーザー |
ikoma
|
| 提出日時 | 2022-05-06 22:50:53 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,247 bytes |
| コンパイル時間 | 185 ms |
| コンパイル使用メモリ | 82,560 KB |
| 実行使用メモリ | 517,376 KB |
| 最終ジャッジ日時 | 2024-07-06 00:16:51 |
| 合計ジャッジ時間 | 10,595 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 11 WA * 22 MLE * 1 -- * 23 |
ソースコード
import sys
input = sys.stdin.readline
sys.setrecursionlimit(10 ** 6)
if "pypyjit" in sys.builtin_module_names:
import pypyjit
pypyjit.set_param("max_unroll_recursion=-1")
N=int(input())
edge = [[] for _ in range(N)]
XY=[list(map(int,input().split())) for _ in range(N-1)]
for x,y in XY:
x,y=x-1,y-1
edge[x].append(y)
edge[y].append(x)
visit = [0]*N
dnode = []
from heapq import *
def dfs(v=0):
visit[v]=1
n_tree = []
del_lst = []
for to in edge[v]:
if visit[to]:continue
n,lst = dfs(to)
n_tree.append(n)
del_lst.extend(lst)
if len(n_tree)==0:
return 1,[]
if len(n_tree)==1:
if del_lst:
# heapify(del_lst)
n = -heappop(del_lst)
else: n=0
return n+n_tree[0]+1,del_lst
if len(n_tree)<=2:
return sum(n_tree)+1,del_lst
# n_tree.sort(reverse=True) # 重い
mx1,mx2=0,0
for n in n_tree:
if mx1<n:
mx2=mx1
mx1=n
elif mx2<n:
mx2=n
ret = mx1+mx2+1
for i in n_tree:
if i!=mx1:
if i!=mx2:
heappush(del_lst, -i)
else:mx2=-1
else:mx1=-1
return ret,del_lst
ans,dl = dfs()
print(ans)
ikoma