1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
import sys
input = sys.stdin.readline
from heapq import heappush, heappop
Vn, En = map(int, input().split())
V = {}
parent = [0 for i in range(Vn + 1)]
for i in range(1, Vn + 1) :
V[i] = []
for i in range(En) :
v1, v2 = map(int, input().split())
V[v1].append(v2)
parent[v2] = parent[v2] + 1
heap = []
for i in range(1, Vn + 1) :
if parent[i] == 0 :
heappush(heap, i)
while heap :
i = heappop(heap)
print(i, end = ' ')
for j in V[i] :
parent[j] = parent[j] - 1
if parent[j] == 0 :
heappush(heap, j)
|
cs |
degree를 세어 0인 점부터 위상정렬하는 정석적인 문제이다.
단 쉬운 문제부터 푼다(= 동위상에서 사전순을 우선해야 한다)는 조건이 있으므로, deque 대신 heap을 이용한다.
'Week 01 ~ 04 : 알고리즘 문제 풀이' 카테고리의 다른 글
파이썬 백준 2623 음악프로그램 (0) | 2021.11.25 |
---|---|
파이썬 백준 2056 작업 (0) | 2021.11.25 |
파이썬 백준 1516 게임 개발 (0) | 2021.11.25 |
파이썬 백준 18405 경쟁적 전염 (0) | 2021.11.25 |
파이썬 백준 4256 트리 (0) | 2021.11.25 |