結果
問題 |
No.2325 Skill Tree
|
ユーザー |
|
提出日時 | 2023-05-28 15:03:42 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 643 ms / 3,000 ms |
コード長 | 881 bytes |
コンパイル時間 | 217 ms |
コンパイル使用メモリ | 81,920 KB |
実行使用メモリ | 153,160 KB |
最終ジャッジ日時 | 2024-12-27 04:22:08 |
合計ジャッジ時間 | 19,394 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 36 |
ソースコード
import bisect n = int(input()) e = [[] for i in range(n+1)] LA = [list(map(int,input().split())) for i in range(n-1)] q = int(input()) Q = [list(map(int,input().split())) for i in range(q)] inf = 10**10 level = [inf]*n level[0] = 1 nums = [0]*n for i,(l,a) in enumerate(LA,1): level[i] = l e[a-1].append(i) nums[i] += 1 dist = [inf]*n q = [] for i in range(n): if nums[i] == 0: q.append(i) dist[i] = level[i] while q: now = q.pop() for nex in e[now]: nums[nex] -= 1 if nums[nex] == 0: dist[nex] = max(dist[now],level[nex]) q.append(nex) techs = [inf] for i in dist: if i != inf: techs.append(i) techs.sort() for t,x in Q: if t == 1: print(bisect.bisect_right(techs,x)) else: ans = dist[x-1] if ans == inf: ans = -1 print(ans)