코드
import sys
from collections import deque
input = sys.stdin.readline
n = int(input())
graph = [[] for _ in range(n+1)]
indegree = [0]*(n+1) # 전입차수 기록
time = [0]*(n+1) # 시간기록
visited = [0]*(n+1) # 방문한 시간 기록
for i in range(1, n+1):
lst = [*map(int, input().split())]
time[i] = lst[0]
for j in range(1, len(lst)-1):
graph[lst[j]].append(i)
indegree[i] += 1
def topol_sort():
queue = deque([])
for i in range(1, n+1):
if indegree[i] == 0:
queue.append(i)
visited[i] = time[i]
while queue:
pn = queue.popleft()
for j in graph[pn]:
indegree[j] -= 1
visited[j] = max(visited[j], visited[pn]+time[j])
if indegree[j] == 0: # 더 들어오는 것이 없으면 queue에 넣어준다.
queue.append(j)
topol_sort()
for i in range(1,n+1):
print(visited[i])
'백준' 카테고리의 다른 글
[백준] 1417번 국회의원 선거 파이썬 코드 (0) | 2024.01.19 |
---|---|
[백준] 17396번 백도어 파이썬 코드 (1) | 2024.01.16 |
[백준] 2056번 작업 파이썬 코드 (0) | 2024.01.05 |
[백준] 2623번 음악프로그램 파이썬 코드 (0) | 2024.01.05 |
[백준] 1766번 문제집 파이썬 코드 (0) | 2024.01.05 |
코드
import sys
from collections import deque
input = sys.stdin.readline
n = int(input())
graph = [[] for _ in range(n+1)]
indegree = [0]*(n+1) # 전입차수 기록
time = [0]*(n+1) # 시간기록
visited = [0]*(n+1) # 방문한 시간 기록
for i in range(1, n+1):
lst = [*map(int, input().split())]
time[i] = lst[0]
for j in range(1, len(lst)-1):
graph[lst[j]].append(i)
indegree[i] += 1
def topol_sort():
queue = deque([])
for i in range(1, n+1):
if indegree[i] == 0:
queue.append(i)
visited[i] = time[i]
while queue:
pn = queue.popleft()
for j in graph[pn]:
indegree[j] -= 1
visited[j] = max(visited[j], visited[pn]+time[j])
if indegree[j] == 0: # 더 들어오는 것이 없으면 queue에 넣어준다.
queue.append(j)
topol_sort()
for i in range(1,n+1):
print(visited[i])
'백준' 카테고리의 다른 글
[백준] 1417번 국회의원 선거 파이썬 코드 (0) | 2024.01.19 |
---|---|
[백준] 17396번 백도어 파이썬 코드 (1) | 2024.01.16 |
[백준] 2056번 작업 파이썬 코드 (0) | 2024.01.05 |
[백준] 2623번 음악프로그램 파이썬 코드 (0) | 2024.01.05 |
[백준] 1766번 문제집 파이썬 코드 (0) | 2024.01.05 |