[백준] 1766: 문제집

JIN·2021년 10월 24일
0

위상정렬 + 우선순위 큐

2252 문제와 비슷하지만 3번째 조건인 '가능하면 쉬운 문제부터 풀어야 한다.'
를 고려하여 우선순위 큐로 삽입해야 합니다.

나머지는 2252:줄세우기 와 동일합니다.

import heapq
v, e = map(int, input().split())
graph = [[] for _ in range(v+1)]
indegree = [0] * (v+1)
for i in range(e):
	a, b = map(int, input().split())
	graph[a].append(b)
	indegree[b] += 1

def topology_sort():
	result = []
	q = []
	for i in range(1, v+1):
		if indegree[i] == 0:
			heapq.heappush(q, i)
	while q:
		now = heapq.heappop(q)
		result.append(now)
		for i in graph[now]:
			indegree[i] -= 1
			if indegree[i] == 0:
				heapq.heappush(q, i)
	for i in result:
		print(i, end =' ')

topology_sort()
profile
배우고 적용하고 개선하기

0개의 댓글