Buggy python submission (verdict: Time Limit Exceeded):
from collections import deque #pypyでも使える
n,q=map(int,input().split())
oyako=[]
for i in range(n-1):
	ab=list(map(lambda x:int(x)-1,input().split()))
	#もっといい感じの書き方ないかな?
	oyako.append(ab)
nodes=[0]*n
for i in range(q):
	p,x=map(int,input().split())
	p-=1
	nodes[p]+=x
#oyakoを、親についての単調増加にしたい->デフォで先頭要素でのソートになるので安心
#oyako.sort()
#と思ったけどソートじゃ無理っぽい
#根から順に処理->bfs幅優先探索
que=deque([0])
color=[0]*n #全てのノードに対して、未探索の0を入れる
color[0]=0 #colorは親としての処理を終えたかどうかを入れる。終えたら1にする
while que: #qが空でないのはこう表現できる
	i=que.popleft()
	if color[i]==0:
		for ab in oyako:
			if ab[0]==i and color[ab[1]]==0:
				nodes[ab[1]]+=nodes[i]
				que.append(ab[1])
			elif ab[1]==i and color[ab[0]]==0:
				nodes[ab[0]]+=nodes[i]
				que.append(ab[0])
		color[i]=1

#綺麗にかけそうでこの書き方をしたけど大丈夫かな?
for node in nodes:
	print(node,end=' ')

Fixed submission:
from collections import deque #pypyでも使える
n,q=map(int,input().split())

edges=[[] for i in range(n)] #枝がどことどこをつなぐかの情報を入れておく二次元配列
for i in range(n-1):
	a,b=map(lambda x:int(x)-1,input().split()) #ラムダ式は必見
	#もっといい感じの書き方ないかな?
	edges[a].append(b) #edges[a]には、ノードaの相方を格納
	edges[b].append(a) #edges[b]には、ノードbの相方を格納する決まり

#nodesの重さを格納
nodes=[0]*n
for i in range(q):
	p,x=map(int,input().split())
	nodes[p-1]+=x

#oyakoを、親についての単調増加にしたい->デフォで先頭要素でのソートになるので安心
#oyako.sort()
#と思ったけどソートじゃ無理っぽい
#根から順に処理->bfs幅優先探索
que=deque([0])
color=[0]*n #全てのノードに対して、未探索の0を入れる
color[0]=0 #colorは親としての処理を終えたかどうかを入れる。終えたら1にする
#TLEなった。二重ループはだめねえ。
# ->oyako(edges)を、二次元配列にしてインデックスの数字を持つものをedges[i]に格納すれば
while que: #qが空でないのはこう表現できる
	i=que.popleft()
	if color[i]==0:
		for edge in edges[i]:
			if color[edge]==0: #相方が親じゃなければ(親ならすでに探索済みのはず)
				nodes[edge]+=nodes[i]
				que.append(edge)
		color[i]=1

#綺麗にかけそうでこの書き方をしたけど大丈夫かな?
for node in nodes:
	print(node,end=' ')

Buggy python submission (verdict: Time Limit Exceeded):
from collections import deque #pypyでも使える
n,q=map(int,input().split())
oyako=[]
for i in range(n-1):
	ab=list(map(lambda x:int(x)-1,input().split()))
	#もっといい感じの書き方ないかな?
	oyako.append(ab)
nodes=[0]*n
for i in range(q):
	p,x=map(int,input().split())
	p-=1
	nodes[p]+=x
#oyakoを、親についての単調増加にしたい->デフォで先頭要素でのソートになるので安心
#oyako.sort()
#と思ったけどソートじゃ無理っぽい
#根から順に処理->bfs幅優先探索
que=deque([0])
color=[0]*n #全てのノードに対して、未探索の0を入れる
color[0]=0 #colorは親としての処理を終えたかどうかを入れる。終えたら1にする
while que: #qが空でないのはこう表現できる
	i=que.popleft()
	if color[i]==0:
		for ab in oyako:
			if ab[0]==i and color[ab[1]]==0:
				nodes[ab[1]]+=nodes[i]
				que.append(ab[1])
			elif ab[1]==i and color[ab[0]]==0:
				nodes[ab[0]]+=nodes[i]
				que.append(ab[0])
		color[i]=1

#綺麗にかけそうでこの書き方をしたけど大丈夫かな?
for node in nodes:
	print(node,end=' ')

Fixed submission:
from collections import deque #pypyでも使える
n,q=map(int,input().split())

edges=[[] for i in range(n)] #枝がどことどこをつなぐかの情報を入れておく二次元配列
for i in range(n-1):
	a,b=map(lambda x:int(x)-1,input().split()) #ラムダ式は必見
	#もっといい感じの書き方ないかな?
	edges[a].append(b) #edges[a]には、ノードaの相方を格納
	edges[b].append(a) #edges[b]には、ノードbの相方を格納する決まり

#nodesの重さを格納
nodes=[0]*n
for i in range(q):
	p,x=map(int,input().split())
	nodes[p-1]+=x

#oyakoを、親についての単調増加にしたい->デフォで先頭要素でのソートになるので安心
#oyako.sort()
#と思ったけどソートじゃ無理っぽい
#根から順に処理->bfs幅優先探索
que=deque([0])
color=[0]*n #全てのノードに対して、未探索の0を入れる
color[0]=0 #colorは親としての処理を終えたかどうかを入れる。終えたら1にする
#TLEなった。二重ループはだめねえ。
# ->oyako(edges)を、二次元配列にしてインデックスの数字を持つものをedges[i]に格納すれば
while que: #qが空でないのはこう表現できる
	i=que.popleft()
	if color[i]==0:
		for edge in edges[i]:
			if color[edge]==0: #相方が親じゃなければ(親ならすでに探索済みのはず)
				nodes[edge]+=nodes[i]
				que.append(edge)
		color[i]=1

#綺麗にかけそうでこの書き方をしたけど大丈夫かな?
for node in nodes:
	print(node,end=' ')