import sys
from collections import deque
input = sys.stdin.readline
N,M = map(int,input().split())
graph = [set() for _ in range(N+1)]
degree = [0 for _ in range(N+1)]
for _ in range(M):
pdN,*arr = list(map(int,input().split()))
for i in range(pdN-1):
x,y = arr[i],arr[i+1]
if y not in graph[x]:
graph[x].add(y)
degree[y] += 1
stack = deque()
cnt = 0
result = []
flag = True
for i in range(1,N+1):
if degree[i]==0:
stack.append(i)
while cnt<N:
if not stack:
flag = False
break
node = stack.popleft()
result.append(str(node))
for next_node in graph[node]:
degree[next_node] -= 1
if degree[next_node] == 0:
stack.append(next_node)
cnt += 1
if flag:
print('\n'.join(result))
else:
print(0)
이 문제와 같은 경우 평범한 위상정렬이다.
여러명의 PD를 통해 앞에서부터, 하나씩 그래프에 SET으로 넣어주었다.
그리고 degree가 0인것들은 최초의 stack에 넣어주고 난뒤에 위상정렬을 구해주면서,
사이클이 발생할 시, 음악프로그램을 구할 수 없는 것이므로, 그때 flag로 분기 처리를 해주었다.
그리고 stack에 나온순서대로 result에 넣어주고 출력을 해주었다.
'알고리즘 > 백준' 카테고리의 다른 글
[BOJ/백준] 3665 최종 순위 (0) | 2021.06.06 |
---|---|
[BOJ/백준] 3165 5 (0) | 2021.06.06 |
[BOJ/백준] 1338 알 수 없는 번호 (0) | 2021.06.06 |
[BOJ/백준] 21778 가희와 프로세스 2 (0) | 2021.06.05 |
[BOJ/백준] 21777 리버스 가희와 프로세스 (0) | 2021.06.05 |