結果
問題 |
No.277 根掘り葉掘り
|
ユーザー |
![]() |
提出日時 | 2025-05-02 16:52:59 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 733 ms / 3,000 ms |
コード長 | 749 bytes |
コンパイル時間 | 493 ms |
コンパイル使用メモリ | 82,296 KB |
実行使用メモリ | 192,516 KB |
最終ジャッジ日時 | 2025-05-02 16:53:09 |
合計ジャッジ時間 | 9,168 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 18 |
ソースコード
import sys sys.setrecursionlimit(100050) N = int(input()) UV = [list(map(int,input().split())) for _ in range(N-1)] E = [[] for _ in range(N)] for u, v in UV: u -= 1 v -= 1 E[u].append(v) E[v].append(u) LR = [[N,N] for _ in range(N)] LR[0][0] = 0 def dfs(x,p=-1): ret = N for y in E[x]: if y != p: LR[y][0] = LR[x][0] + 1 ret = min(ret, dfs(y,x) + 1) if ret == N: LR[x][1] = 0 return 0 else: LR[x][1] = ret return ret dfs(0) nv = [1] * N Q = [0] nv[0] = 0 while Q: x = Q.pop() for y in E[x]: if nv[y]: nv[y] = 0 Q.append(y) LR[y][1] = min(LR[x][1] + 1,LR[y][1]) for lr in LR: print(min(lr))