結果
| 問題 |
No.2643 Many Range Sums Problems
|
| コンテスト | |
| ユーザー |
shobonvip
|
| 提出日時 | 2024-02-13 15:05:37 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 743 ms / 8,000 ms |
| コード長 | 816 bytes |
| コンパイル時間 | 346 ms |
| コンパイル使用メモリ | 82,164 KB |
| 実行使用メモリ | 79,812 KB |
| 最終ジャッジ日時 | 2024-09-28 18:29:44 |
| 合計ジャッジ時間 | 12,232 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 34 |
ソースコード
n, k = map(int,input().split())
r = [0] * n
x = [0] * n
for i in range(n):
r[i], x[i] = map(int,input().split())
tmp_x = x[::]
tmp_v = [0] * n
for st in range(n):
tmp_rx = [0] * (n + 1)
tmp_rv = [0] * (n + 1)
tmp_x[st] = 0
tmp_v[st] = 1
mode = 1
m_lb = - 10 ** 18
m_ub = 10 ** 18
for i in range(n-1,-1,-1):
tmp_rx[i] = tmp_rx[r[i]] + tmp_x[i]
tmp_rv[i] = tmp_rv[r[i]] + tmp_v[i]
tar_x = tmp_rx[i] - tmp_rx[i+1]
tar_v = tmp_rv[i] - tmp_rv[i+1]
# 0 <= tar_x + tar_v * M <= K
if tar_v == 0:
if not 0 <= tar_x <= k:
mode = 0
elif tar_v == 1:
m_lb = max(m_lb, - tar_x)
m_ub = min(m_ub, k - tar_x)
else:
m_lb = max(m_lb, tar_x - k)
m_ub = min(m_ub, tar_x)
if not m_lb <= m_ub:
mode = 0
if mode:
print("Yes")
else:
print("No")
tmp_x[st] = x[st]
tmp_v[st] = 0
shobonvip