結果
| 問題 |
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')
prd_xxx