結果
| 問題 | No.900 aδδitivee |
| コンテスト | |
| ユーザー |
sasa8uyauya
|
| 提出日時 | 2026-03-11 22:46:43 |
| 言語 | PyPy3 (7.3.17) |
| 結果 |
AC
|
| 実行時間 | 631 ms / 2,000 ms |
| コード長 | 1,376 bytes |
| 記録 | |
| コンパイル時間 | 415 ms |
| コンパイル使用メモリ | 85,324 KB |
| 実行使用メモリ | 101,360 KB |
| 最終ジャッジ日時 | 2026-03-11 22:47:00 |
| 合計ジャッジ時間 | 16,281 ms |
|
ジャッジサーバーID (参考情報) |
judge3_1 / judge2_0 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 27 |
ソースコード
n=int(input())
e=[[] for i in range(n)]
a=[0]*n
for i in range(n-1):
u,v,w=map(int,input().split())
e[u]+=[v]
a[v]=w
o=[]
y=[0]*n
g=[0]*n
d=[0]*n
v=[0]*n
q=[0]
while len(q)>0:
s=q[-1]
if v[s]==0:
v[s]=1
o+=[s]
y[s]=len(o)-1
for t in e[s]:
q+=[t]
d[t]=d[s]+1
a[t]+=a[s]
else:
g[s]=1+sum(g[t] for t in e[s])
q.pop()
B=317
std=[n]*B*B
for i in range(n):
std[i]=d[o[i]]
stm=[min(std[y*B:y*B+B]) for y in range(B)]
st1=[0]*B*B
st2=[(0,0)]*B
def ADD(l,r,u,v):
yl=l//B
yr=r//B
for y in [yl,yr]:
p1,p2=st2[y]
for i in range(y*B,y*B+B):
if y<n:
st1[i]+=p1*(std[i]-stm[y])+p2
st2[y]=(0,0)
if yl==yr:
for i in range(l,r+1):
if y<n:
st1[i]+=v*(std[i]-u)
else:
for i in range(l,yl*B+B):
if y<n:
st1[i]+=v*(std[i]-u)
for i in range(yr*B,r+1):
if y<n:
st1[i]+=v*(std[i]-u)
for i in range(yl+1,yr):
p1,p2=st2[i]
st2[i]=(p1+v,p2+v*(stm[i]-u))
return
def GET(x):
y=x//B
p1,p2=st2[y]
for i in range(y*B,y*B+B):
if y<n:
st1[i]+=p1*(std[i]-stm[y])+p2
st2[y]=(0,0)
return st1[x]
for i in range(n):
st1[i]=a[o[i]]
Q=int(input())
for _ in range(Q):
q=list(map(int,input().split()))
t=q[0]
if t==1:
t,a,x=q
if g[a]>0:
ADD(y[a]+1,y[a]+g[a]-1,d[a],x)
else:
t,b=q
print(GET(y[b]))
sasa8uyauya