728x90
https://www.acmicpc.net/problem/2623
문제 풀이
그래프 이론 중 위상정렬 문제이다.
위상정렬 알고리즘을 알고 있다면 쉽게 풀 수 있는 문제이다.
느낀 점
위상정렬에 대해서 한번 짚고 넘어갈 수 있는 문제가 되었다.
코드
import sys
input = sys.stdin.readline
N, M = map(int, input().split())
graph = [[] for _ in range(N+1)]
indegree = [0] * (N+1)
for _ in range(M):
arr = list(map(int, input().split()))
for s in range(1, arr[0]):
graph[arr[s]].append(arr[s+1])
indegree[arr[s+1]] += 1
q, ans = [], []
for i in range(1, N+1):
if indegree[i] == 0:
q.append(i)
while q:
n = q.pop(0)
ans.append(n)
for i in graph[n]:
indegree[i] -= 1
if indegree[i] == 0:
q.append(i)
if len(ans) != N: print(0)
else:
for i in ans:
print(i)
'문제 풀이 > 백준(BOJ)' 카테고리의 다른 글
[Python] 백준 10819번 : 차이를 최대로 (0) | 2022.08.01 |
---|---|
[Python] 백준 1182번 : 부분수열의 합 (0) | 2022.07.31 |
[Python] 백준 1107번 : 리모컨 (0) | 2022.07.30 |
[Python] 백준 1759번 : 암호 만들기 (0) | 2022.07.29 |
[Python] 백준 1577번 : 도로의 개수 (0) | 2022.07.26 |
댓글