結果
問題 | No.2325 Skill Tree |
ユーザー | prd_xxx |
提出日時 | 2023-05-28 14:14:44 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 657 ms / 3,000 ms |
コード長 | 801 bytes |
コンパイル時間 | 240 ms |
コンパイル使用メモリ | 81,920 KB |
実行使用メモリ | 149,120 KB |
最終ジャッジ日時 | 2024-12-27 00:11:29 |
合計ジャッジ時間 | 20,630 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 36 |
ソースコード
N = int(input()) LA = [tuple(map(int,input().split())) for i in range(N-1)] Q = int(input()) qs = [tuple(map(int,input().split())) for i in range(Q)] rs = [[] for _ in range(N)] level = [0]*N for i,(l,a) in enumerate(LA, start=1): rs[a-1].append((i,l)) level[i] = l stack = [0] reached = [0] * N reached[0] = 1 while stack: v = stack.pop() for r,l in rs[v]: level[r] = max(level[r], level[v]) stack.append(r) reached[r] = 1 INF = float('inf') for i in range(N): if reached[i]==0: level[i] = INF s_level = sorted(level) from bisect import bisect ans = [None] * Q for qi,(t,x) in enumerate(qs): if t==1: c = bisect(s_level, x) ans[qi] = c else: ans[qi] = -1 if level[x-1]==INF else level[x-1] print(*ans, sep='\n')