https://www.acmicpc.net/problem/2056
들어는 노드인지 나는 노드인지 주어진 값들의 구분을 제대로 하지 않았다.
왜 안했는가..?
내 예상이 당연히 맞을 것이라 생각한 착각이다.
나는 항상 틀릴 수 있다 확인을 필 수 적으로 하기
어렴풋한 어리짐작으로 풀지말기
하나 이상이라면 한개 보다 많다는 것을 의미한다.
이를 빼먹었다.
list.sort(key=lambda: x[1],reverse)
리스트.sort(key) 순이다.
# 모든 작업을 완료하기 위해 필요한 최소 시간을 구하여라
# 두번째 줄부터 N+1번째 줄까지 N개의 줄이 주어진다.
# 시간, 갯수, 선행 관계에 있는 작업들의 번호
N = int(input())
graph = []
in_cnt = [0]* (N+1)
time = [0]*(N+1)
graph = [[] for _ in range(N+1)]
wait = []
for i in range(N):
li = list(map(int, input().split()))
time[i+1] = li[0]
in_cnt[i+1] = li[1]
if in_cnt[i+1] == 0:
wait.append([i+1, time[i+1]])
for j in range(li[1]):
graph[li[2+j]].append(i+1)
while wait:
wait.sort(key=lambda x: x[1], reverse=True)
top = wait.pop()
for g in graph[top[0]]:
in_cnt[g] -= 1
if in_cnt[g] == 0:
wait.append([g, top[1]+time[g]])
print(top[1])