반응형
문제
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 |
최근댓글