반응형
문제
https://www.acmicpc.net/problem/1516
소스코드
import sys
from collections import deque
input = sys.stdin.readline
queue = deque()
n = int(input())
grape = {}
indegree = [0] * n
answer = [0] * n
time = [0] * n
for i in range(n):
data = list(map(int, input().split()))
data_len = len(data) - 1
time[i] = data[0]
indegree[i] = data_len - 1
if data_len - 1 == 0:
queue.append(i)
for j in range(1, data_len, 1):
if data[j] - 1 not in grape:
grape[data[j] - 1] = []
grape[data[j] - 1].append(i)
sorttable = []
while queue:
temp = queue.popleft()
answer[temp] += time[temp]
if temp in grape:
for i in grape[temp]:
indegree[i] -= 1
answer[i] = max(answer[i], answer[temp])
if indegree[i] == 0:
queue.append(i)
for i in answer:
print(i)
위상정렬 문제입니다.
순서가 정해져 있는 작업을 차례대로 수행할 때 사용할 수 있는 알고리즘입니다.
시간 복잡도는 O(V+E)입니다.
반응형
'Programming > 알고리즘' 카테고리의 다른 글
[백준/Python] 2252번 줄 세우기 - (위상 정렬) (0) | 2024.11.24 |
---|---|
[백준/Python] 1922번 네트워크 연결 - (크루스칼) (0) | 2024.11.23 |
[백준/Python] 11657번 타임머신 - (벨만 포드) (0) | 2024.11.21 |
[백준/Python] 1753번 최단경로 (1) | 2024.11.20 |
[백준/Python] 1275번 커피숍 2 (0) | 2024.11.19 |
댓글