1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
import sys
input = sys.stdin.readline
from collections import deque
Vn = int(input())
V = {}
for i in range(1, Vn + 1) :
V[i] = []
B = [0 for i in range(Vn + 1)]
parent = [0 for i in range(Vn + 1)]
for i in range(1, Vn + 1) :
l = list(map(int, input().split()))
B[i] = l[0]
for j in range(1, len(l) - 1) :
V[l[j]].append(i)
parent[i] = parent[i] + len(l) - 2
que = deque()
for i in range(1, Vn + 1) :
if parent[i] == 0 :
que.append(i)
D = B[:]
while que :
now = que.popleft()
for next in V[now] :
D[next] = max(D[next], D[now] + B[next])
parent[next] = parent[next] - 1
if parent[next] == 0 :
que.append(next)
for i in range(1, Vn + 1) :
print(D[i])
|
cs |
1005 ACM Craft의 코드(https://uneducatedjungler.tistory.com/88)와 구조는 같다.
이전엔 DFS로 풀었으니 BFS로 구현해보았다.
'Week 01 ~ 04 : 알고리즘 문제 풀이' 카테고리의 다른 글
파이썬 백준 2056 작업 (0) | 2021.11.25 |
---|---|
파이썬 백준 1766 문제집 (0) | 2021.11.25 |
파이썬 백준 18405 경쟁적 전염 (0) | 2021.11.25 |
파이썬 백준 4256 트리 (0) | 2021.11.25 |
파이썬 백준 1939 중량제한 (0) | 2021.11.25 |