
풀이.
진입 차수가 0인 정점을 힙에 삽입하고 힙에서 해당 원소를 꺼내고 해당 원소와 연결된 간선을 제거해준다
이후 진입 차수가 0이된 정점을 힙에 삽입을하고 힙이 모두 빌 때까지 반복을 한다.
소스코드.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import heapq | |
import sys | |
def topology(): | |
heap = [] | |
result = [] | |
for i in range(1, n+1): | |
if indegree[i] == 0: | |
heapq.heappush(heap, i) | |
while heap: | |
score = heapq.heappop(heap) | |
result.append(score) | |
for y in arr[score]: | |
indegree[y] -= 1 | |
if indegree[y] == 0: | |
heapq.heappush(heap, y) | |
return result | |
input = sys.stdin.readline | |
n, m = map(int, input().split()) | |
arr = [[] for i in range(n+1)] | |
indegree = [0] * (n+1) | |
for i in range(m): | |
x, y = map(int, input().split()) | |
arr[x].append(y) | |
indegree[y] += 1 | |
print(*topology()) |
'프로그래밍 > 백준' 카테고리의 다른 글
[백준] 1238. 파티 - 파이썬 (0) | 2021.09.24 |
---|---|
[백준] 1517 버블 소트 - 파이썬 (0) | 2021.09.23 |
[백준] 3665. 최종 순위 - 파이썬 (0) | 2021.09.15 |
[백준] 2357 최솟값과 최댓값 - 파이썬 (0) | 2021.09.14 |
[백준] 11505 구간 곱 구하기 - 파이썬 (0) | 2021.09.14 |