또상정렬. heap써서 완전한 위상정렬은 아니고 그냥 앞숫자부터 빼주는위상정렬.
import sys
input = sys.stdin.readline
from heapq import heappop,heappush
def topological_sort():
heap=[]
for i in range(1,N+1):
if not level[i]:
heappush(heap,i)
while heap:
cur_solve = heappop(heap)
answer.append(cur_solve)
for next_solve in ordered[cur_solve]:
level[next_solve] -=1
if not level[next_solve]:
heappush(heap,next_solve)
# 문제는 모두 풀어야한다. 먼저푸는게 좋은 문제는 먼저 푼느걸 반드시 먼저 ㅍ루어야한다.
# 가능하면 쉬운문제부터 풀어야한다.(앞번호부터)
N,M = map(int,input().split())
ordered = {i:[] for i in range(1,N+1)}
level = {i:0 for i in range(1,N+1)}
answer = []
for _ in range(M):
first,second = map(int,input().split())
ordered[first] += [second]
level[second] +=1
topological_sort()
print(*answer)
'practivceAlgorithm > 백준' 카테고리의 다른 글
[백준][Python] 1158요세푸스문제 (0) | 2021.07.31 |
---|---|
[백준][Python] 20002 사과나무 (0) | 2021.07.31 |
[백준][Python] 1497기타콘서트 (0) | 2021.07.31 |
[백준][Python] 1102 발전소 (0) | 2021.07.31 |
[백준][Python] 14939 불끄기. (1) | 2021.07.31 |