practivceAlgorithm/백준
[백준][Python] 1766 문제집
findTheValue
2021. 7. 31. 19:28
또상정렬. 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)