結果
| 問題 | No.3719 Share the Tree |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2026-11-02 21:13:26 |
| 言語 | PyPy3 (8.0.1 + ACL) |
| 結果 |
AC
不安定
|
| 実行時間 | 347 ms / 2,000 ms |
| + 999µs | |
| コード長 | 1,578 bytes |
| 記録 | |
| コンパイル時間 | 82 ms |
| コンパイル使用メモリ | 64,244 KB |
| 実行使用メモリ | 59,392 KB |
| 平均クエリ数 | 2.00 |
| 最終ジャッジ日時 | 2026-11-02 21:13:34 |
| 合計ジャッジ時間 | 8,132 ms |
|
ジャッジサーバーID (参考情報) |
judge4_0 / judge1_0 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 |
| other | AC * 26 |
ソースコード
from heapq import heapify, heappush, heappop
def prufer_encode(edeges:list[tuple[int,int]]) -> list[int]:
# 0-indexed
# O(NlogN)
n = len(edeges)+1
g = [[] for _ in range(n)]
deg = [0]*n
for a, b in edeges:
g[a].append(b)
g[b].append(a)
deg[a] += 1
deg[b] += 1
q = []
for v in range(n):
if deg[v] == 1:
q.append(v)
heapify(q)
ret = []
for _ in range(n-2):
v = heappop(q)
assert deg[v] == 1
deg[v] -= 1
for nv in g[v]:
if deg[nv] > 0:
ret.append(nv)
deg[nv] -= 1
if deg[nv] == 1:
heappush(q,nv)
return ret
def prufer_decode(code: list[int]) -> list[tuple[int,int]]:
# 0-indexed
# O(NlogN)
n = len(code)+2
cnt = [0]*n
for v in code:
cnt[v] += 1
q = []
for v in range(n):
if cnt[v] == 0:
q.append(v)
heapify(q)
ret = []
for a in code:
b = heappop(q)
assert cnt[b] == 0
ret.append((a,b))
cnt[a] -= 1
if cnt[a] == 0:
heappush(q,a)
ret.append((q.pop(), q.pop()))
return ret
p = input()
n = int(input())
print(n-2)
if p == "Alice":
ee = []
for _ in range(n-1):
a, b = [int(x)-1 for x in input().split()]
ee.append((a,b))
res = prufer_encode(ee)
print(*[v+1 for v in res])
else:
cc = [int(x)-1 for x in input().split()]
res = prufer_decode(cc)
for a, b in res:
print(a+1, b+1)