[백준] 1766번 문제집 (위상정렬, 우선순위큐, 파이썬)

728x90
반응형

위상정렬 + 우선순위큐 

문제번호가 작은 것 부터 풀어야된다 

from collections import defaultdict
import heapq

height=defaultdict(list)
cnt=defaultdict(int)
q=[]

n,m=map(int,input().split())
for i in range(m):
    a,b=map(int,input().split())
    height[a].append(b)
    cnt[b]+=1 # b이전에 a가 선행된다 

for i in range(1,n+1):
    if cnt[i]==0:
        q.append(i)


result=[]

while q:
    x=heapq.heappop(q)
    result.append(x)

    for j in height[x]:
        cnt[j]-=1
        if cnt[j]==0:
            heapq.heappush(q,j)

for x in result:
    print(x, end=' ')
        

    
728x90
반응형
TAGS.

Comments