728x90
https://www.acmicpc.net/problem/14567
진입차수가 0 이면 queue에 넣어주고,
queue에서 빼서 현재 노드 탐색하고, 현재 노드에서 인접한 노드들의 진입차수를 1씩 뺸다.
그리고 진입차수가 0이 되면 다시 queue에 넣어준다.
현재 최소 학기를 구해야 하므로 , queue에 enqueue하는게 몇번째인지 세어주는 count 도 같이 넣어준다.
from collections import deque
n, m = map(int, input().split())
graph = [[] for _ in range(n+1)]
indegree = [0] * (n+1) # 진입차수
result = [0] * (n+1)
for _ in range(m):
a, b = map(int, input().split())
graph[a].append(b)
indegree[b] += 1
def topology_sort():
queue = deque()
for i in range(1, n+1):
if indegree[i] == 0:
queue.append((i, 1))
result[i] = 1
while queue:
now, count = queue.popleft()
for i in graph[now]:
indegree[i] -= 1
result[i] += 1 # 1학기 추가
if indegree[i] == 0:
queue.append((i, count+1))
result[i] = count+1
topology_sort()
print(*result[1:])
728x90
'Algorithm (PS)' 카테고리의 다른 글
[백준] 1245번: 농장관리 Swift 풀이 (BFS/DFS) (1) | 2022.12.14 |
---|---|
[백준] 10836번: 여왕벌 (파이썬/Python) - 시뮬레이션/구현/Greedy (0) | 2022.12.12 |
[백준] 13913번 : 숨바꼭질 4 (파이썬/Python) - BFS 풀이 (0) | 2022.12.10 |
[백준] 22869번: 징검다리 건너기 small (파이썬/Python) - DP (0) | 2022.12.10 |
[백준] 20444번: 색종이와 가위 (파이썬/Python) - 이진탐색 (0) | 2022.12.09 |