14267 회사 문화 1

정민용·2023년 5월 31일

백준

목록 보기
250/286

문제

영선회사에는 매우 좋은 문화가 있는데, 바로 상사가 직속 부하를 칭찬하면 그 부하가 부하의 직속 부하를 연쇄적으로 칭찬하는 내리 칭찬이 있다. 즉, 상사가 한 직속 부하를 칭찬하면 그 부하의 모든 부하들이 칭찬을 받는다.

모든 칭찬에는 칭찬의 정도를 의미하는 수치가 있는데, 이 수치 또한 부하들에게 똑같이 칭찬 받는다.

직속 상사와 직속 부하관계에 대해 주어지고, 칭찬에 대한 정보가 주어질 때, 각자 얼마의 칭찬을 받았는지 출력하시오,

# 14267
import sys
input = lambda: sys.stdin.readline().strip()

# pypy3로 제출하면 메모리초과가 발생할 수 있음
sys.setrecursionlimit(10**9)

from collections import deque

n, m = map(int, input().split())
number = list(map(int, input().split()))

# graph[직속 상사] = [직원1, 직원2, ...]
graph = []
for _ in range(n+1):
    graph.append([])
for i in range(1, n):
    graph[number[i]].append(i+1)
for g in graph:
    g.sort()
    
points = [0] * (n+1)
    
# points[직원] = 직접 받은 칭찬 + points[직속 상사]

for _ in range(m):
    i, w = map(int, input().split())
    points[i] += w
    
def dfs(v):
    for g in graph[v]:
        points[g] += points[v]
        dfs(g)

dfs(1)
print(*points[1:])

백준 14267 회사 문화 1

0개의 댓글