結果
| 問題 |
No.2325 Skill Tree
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2023-05-29 23:15:57 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 1,367 ms / 3,000 ms |
| コード長 | 812 bytes |
| コンパイル時間 | 314 ms |
| コンパイル使用メモリ | 82,048 KB |
| 実行使用メモリ | 119,660 KB |
| 最終ジャッジ日時 | 2024-12-28 10:47:12 |
| 合計ジャッジ時間 | 33,785 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 36 |
ソースコード
import heapq
import bisect as bs
INF = 1 << 60
n = int(input())
g = [[] for _ in range(n)]
for i in range(1, n):
l, a = map(int, input().split())
a -= 1
g[a].append((i, l))
src = 0
dist = [INF for _ in range(n)]
dist[src] = 1
hp = [(1, src)]
while len(hp) > 0:
cd, cur = heapq.heappop(hp)
if cd > dist[cur]:
continue
for nxt, lv in g[cur]:
if dist[nxt] <= max(dist[cur], lv):
continue
dist[nxt] = max(dist[cur], lv)
heapq.heappush(hp, (dist[nxt], nxt))
items = []
for v in range(n):
if dist[v] < INF:
items.append(dist[v])
items.sort()
q = int(input())
for _ in range(q):
t, x = map(int, input().split())
if t == 1:
i = bs.bisect_right(items, x)
print(i)
elif t == 2:
x -= 1
if dist[x] < INF:
print(dist[x])
else:
print("-1")