코드
from collections import deque
import sys
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):
list = [*map(int,input().split())]
time[i] = list[0]
indegree[i] = list[1]
if len(list) > 2:
for j in list[2:]:
graph[j].append(i)
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:
popnum = queue.popleft()
for j in graph[popnum]:
indegree[j] -= 1
visited[j] = max(visited[j],visited[popnum]+time[j]) # 매번 초기화를 해주어야 한다.
# 일이 끝날 때마다 들어오는 것이므로
if indegree[j] ==0:
queue.append(j)
topol_sort()
print(max(visited))
'백준' 카테고리의 다른 글
[백준] 17396번 백도어 파이썬 코드 (1) | 2024.01.16 |
---|---|
[백준] 1516번 게임 개발 파이썬 코드 (0) | 2024.01.16 |
[백준] 2623번 음악프로그램 파이썬 코드 (0) | 2024.01.05 |
[백준] 1766번 문제집 파이썬 코드 (0) | 2024.01.05 |
[백준] 2637번 장난감 조립 파이썬 코드 (0) | 2024.01.04 |
코드
from collections import deque
import sys
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):
list = [*map(int,input().split())]
time[i] = list[0]
indegree[i] = list[1]
if len(list) > 2:
for j in list[2:]:
graph[j].append(i)
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:
popnum = queue.popleft()
for j in graph[popnum]:
indegree[j] -= 1
visited[j] = max(visited[j],visited[popnum]+time[j]) # 매번 초기화를 해주어야 한다.
# 일이 끝날 때마다 들어오는 것이므로
if indegree[j] ==0:
queue.append(j)
topol_sort()
print(max(visited))
'백준' 카테고리의 다른 글
[백준] 17396번 백도어 파이썬 코드 (1) | 2024.01.16 |
---|---|
[백준] 1516번 게임 개발 파이썬 코드 (0) | 2024.01.16 |
[백준] 2623번 음악프로그램 파이썬 코드 (0) | 2024.01.05 |
[백준] 1766번 문제집 파이썬 코드 (0) | 2024.01.05 |
[백준] 2637번 장난감 조립 파이썬 코드 (0) | 2024.01.04 |