반응형
https://www.acmicpc.net/problem/1766
import heapq
import collections
import sys
input = sys.stdin.readline
n, m = map(int, input().split())
deg = [0 for _ in range(n+1)]
graph = collections.defaultdict(list)
for _ in range(m):
a, b = map(int, input().split())
graph[a].append(b)
deg[b] += 1
q = []
for i in range(1, n+1):
if deg[i] == 0:
heapq.heappush(q, i)
result = []
while q:
now = heapq.heappop(q)
result.append(now)
for i in graph[now]:
deg[i] -= 1
if deg[i] == 0:
heapq.heappush(q, i)
print(*result)
난이도는 골드2로 되어있으나
위상 정렬 유형의 기본 문제라고 할 수 있다.
최대한 작은 문제를 풀려고 하기 때문에 최소힙을 사용하는 것 정도가 추가된 느낌이다.
댓글