반응형

   문제

   https://www.acmicpc.net/problem/1766



위상정렬읠 하는것은 동일하다. 위상정렬의 특성상 따라 여러가지 출력값을 가질수 있다.

 이 문제는 한가지 값만 나올수 있도록 조건이 있다.

쉬운 문제를 먼저 즉 진입차수가 0일때도 순서가 있다.

최소힙을 이용하여 가장 쉬운(문제 번호가 작은) 문제부터 출력 할수 있도록 해주면 된다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import sys
import heapq
 
N,M=map(int,sys.stdin.readline().split())
tree=[[] for _ in range(N+1)]
inDegree=[0 for _ in range(N+1)]
 
 
q=[]
#문제 순서
for _ in range(M):
    a,b=map(int,sys.stdin.readline().split())
    tree[a].append(b)
    inDegree[b]+=1
 
#진입차수가 0이면 큐에 넣기
for i in range(1,N+1):
    if inDegree[i]==0:
        heapq.heappush(q,i)
 
#위상정렬
result=[]
while q:
    a=heapq.heappop(q)#최소힙 사용
    result.append(a)
    for i in tree[a]:
        inDegree[i]-=1
        if inDegree[i]==0:
            heapq.heappush(q,i)
 
print(*result)
 

cs





반응형

'알고리즘(python) > 정렬' 카테고리의 다른 글

[Python]위상정렬 백준 1005  (0) 2020.04.14
[Python]위상정렬 백준 3665  (0) 2020.04.13
[Python]위상정렬 백준 2252  (0) 2020.04.12
[Python]정렬 백준 10814  (0) 2020.01.02
[Python]정렬 백준 1181  (0) 2020.01.02
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기