結果

問題 No.3719 Share the Tree
コンテスト
ユーザー hitori6541
提出日時 2026-11-02 21:13:26
言語 PyPy3
(8.0.1 + ACL)
コンパイル:
pypy3 -mpy_compile _filename_
実行:
pypy3 _filename_
結果
AC  
実行時間 347 ms / 2,000 ms
+ 999µs
コード長 1,578 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 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
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

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)
    


    
0