반응형
문제
https://www.acmicpc.net/submit/2252/86061561
소스코드
import sys
from collections import deque
input = sys.stdin.readline
n, m = map(int, input().split())
indegree = [0] * n
grape = {}
for i in range(m):
a, b = map(int, input().split())
if a - 1 not in grape:
grape[a - 1] = []
grape[a - 1].append(b - 1)
indegree[b - 1] += 1
queue = deque()
for i in range(n):
if indegree[i] == 0:
queue.append(i)
answer = []
while queue:
temp = queue.popleft()
answer.append(temp + 1)
if temp in grape:
for go in grape[temp]:
indegree[go] -= 1
if indegree[go] == 0:
queue.append(go)
print(*answer)
위상정렬 풀이입니다.
예로 1 3 이 주어지면 학생 1이 학생 3보다 앞에 서야하기때문에 학생 3의 진입 간선으로 학생 1을 설정하여 위상정렬을 진행하면 됩니다.
반응형
'Programming > 알고리즘' 카테고리의 다른 글
[백준/Python] 1238번 파티 - (다익스트라) (0) | 2024.11.27 |
---|---|
[백준/Python] 1717번 집합의 표현 - (유니온파인드) (0) | 2024.11.26 |
[백준/Python] 1922번 네트워크 연결 - (크루스칼) (0) | 2024.11.23 |
[백준/Python] 1516번 게임 개발 - (위상정렬) (1) | 2024.11.22 |
[백준/Python] 11657번 타임머신 - (벨만 포드) (0) | 2024.11.21 |
댓글