音楽番組


質問する


https://www.acmicpc.net/problem/2623

コード#コード#

from collections import deque

n, m = map(int, input().split())

graph = [[] for _ in range(n+1)]
in_degree = [0]*(n+1)

for i in range(m):
    temp = list(map(int, input().split()))
    for j in range(2, temp[0]+1):
        graph[temp[j-1]].append(temp[j])
        in_degree[temp[j]] += 1

q = deque()
for i in range(1, n+1):
    if in_degree[i] == 0:
        q.append(i)
answer = []
while q:
    now = q.popleft()
    answer.append(now)
    for i in graph[now]:
        in_degree[i] -= 1
        if in_degree[i] == 0:
            q.append(i)

if len(answer)==n:
    for i in answer:
        print(i)
else:
    print(0)

に答える


位相位置合わせの問題!
歌手たちをグラフのノードと見なし,入力した出演歌手の順序を一方向性幹線で接続すると,ループのない一方向性グラフの例入力が完了する.
for i in range(m):
    temp = list(map(int, input().split()))
    for j in range(2, temp[0]+1):
        graph[temp[j-1]].append(temp[j])
        in_degree[temp[j]] += 1

# graph [[], [4], [5, 3], [], [3], [4], [2]]
# in_degree [0, 0, 1, 2, 2, 1, 0]
これでgraphとin degreeが完了し、in degreeはindexのノードが何個のノードに接続されているかを示します(?)表示
in degreeが0のノードをqueueに挿入しbfsで順番~~を出力する