結果
| 問題 |
No.2643 Many Range Sums Problems
|
| コンテスト | |
| ユーザー |
Koi
|
| 提出日時 | 2024-02-13 15:18:12 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 1,786 ms / 8,000 ms |
| コード長 | 1,456 bytes |
| コンパイル時間 | 389 ms |
| コンパイル使用メモリ | 82,400 KB |
| 実行使用メモリ | 83,180 KB |
| 最終ジャッジ日時 | 2024-09-28 18:30:17 |
| 合計ジャッジ時間 | 26,556 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 34 |
ソースコード
#faster ver
from collections import deque
N,K=map(int,input().split())
R=[]
G1=[[] for _ in range(N+1)]
for i in range(N):
r,x=map(int,input().split())
R.append(r)
G1[i].append([r,x])
G1[r].append([i,-x])
answers=[]
Group_num=[-1]*(N+1)
que=deque([0])
seen=[False]*(N+1)
seen[0]=True
B=[0]*(N+1)
G2=[[] for _ in range(N+1)]
while len(que):
p=que.popleft()
for (q,x) in G1[p]:
if(not seen[q]):
que.append(q)
seen[q]=True
B[q]=B[p]+x
G2[p].append(q)
for i in range(N):
que=deque([0])
Group_num[0]=1
diff_L=-10**17
diff_R=10**17
ans="Yes"
while len(que):
p=que.popleft()
for q in G2[p]:
if((p==i and q==R[i]) or (q==i and p==R[i])):
Group_num[q]=2
else:
Group_num[q]=Group_num[p]
que.append(q)
seen[q]=True
for j in range(N):
if(Group_num[j]==Group_num[j+1]):
if(B[j+1]-B[j]<0 or B[j+1]-B[j]>K):
ans="No"
else:
if(Group_num[j]==1 and Group_num[j+1]==2):
Left=B[j+1]-B[j]-K
Right=B[j+1]-B[j]
else:
Left=B[j]-B[j+1]
Right=K+B[j]-B[j+1]
diff_L=max(diff_L,Left)
diff_R=min(diff_R,Right)
if(diff_L>diff_R):
ans="No"
answers.append(ans)
for ans in answers:
print(ans)
Koi