처음에 문제 이해가 잘 안되서 질문 목록을 찾아본 문제입니다. 양이 들어올때마다 늑대가 먹을 수 있는 것이 아닌, 늑대가 일생에 정해진 만큼 먹으면 더이상 먹지 못하는 구조입니다.
DFS로 풀 수 있는 문제이며, 제한 사항이 섬은 최대 123456개 까지 존재할 수 있습니다. 때문에 최악의 경우 한 줄기만 가지는 트리 구조가 형성될 수 있으므로 재귀 깊이를 123457까지는 늘려야 합니다.
import sys
sys.setrecursionlimit(123458)
input = sys.stdin.readline
n = int(input())
connect = [[] for _ in range(n + 1)]
node = [[], [0, 0]]
for i in range(n - 1):
spec, cnt, kid = map(str, input().rstrip().split())
connect[int(kid)].append(i + 2)
# node에 종류, 개체수 저장
node.append([spec, int(cnt)])
def dfs(v):
result = 0 if node[v][0] == "W" else node[v][1]
# leaf 노드이고 양인 경우
if len(connect[v]) == 0:
if node[v][0] == "S":
return node[v][1]
else:
return 0
for x in connect[v]:
result += dfs(x)
# 늑대인 경우 밑 노드들을 탐색한 후 결과를 반영
if node[v][0] == "W":
# 양이 더 작을 경우
if result < node[v][1]:
node[v][1] -= result
result = 0
# 늑대가 더 작을 경우
else:
result -= node[v][1]
node[v][1] = 0
return result
print(dfs(1))