반응형
https://www.acmicpc.net/problem/2623
import collections
n, m = map(int, input().split())
graph = collections.defaultdict(list)
indegree = [0 for _ in range(n)]
for _ in range(m):
lst = list(map(int, input().split()))
for i in range(2, lst[0]+1):
a = lst[i-1]
b = lst[i]
graph[a].append(b)
indegree[b-1] += 1
nums = collections.deque()
for i in range(n):
if indegree[i] == 0:
nums.append(i+1)
order = []
while nums:
cur = nums.popleft()
order.append(cur)
for next in graph[cur]:
indegree[next-1] -= 1
if indegree[next-1] == 0:
nums.append(next)
if n != len(order):
print(0)
quit()
else:
for i in range(len(order)):
print(order[i])
골드2이긴하지만 전형적인 위상정렬 문제다.
위상 정렬이 불가능한 경우는 order에 모든 원소가 들어가 있는지 여부로 판단이 가능하다.
불가능한 경우 => 사이클이 발생하여 nums에 추가되지 못하기 때문이다.
댓글