ABC315E - Prerequisites

考え方

DFSで帰りがけを見る.
スタックで実装できる.
【関連】
非再帰 Euler Tour を Python でやる - Qiita
ABC284E - Count Simple Paths - 競プロはじめました

回答例

DFSをするためのseenと,すでにansに加えたかを管理するseen2を使った.

N = int(input())
G = [[] for _ in range(N)]
for i in range(N):
    c, *p = map(int, input().split())
    if c == 0:continue
    for pp in p:
        pp -= 1
        G[i].append(pp)

ans = []
st = [~0, 0]
seen = [False]*N
seen2 = [False]*N
while st:
    cur = st.pop()
    if cur >= 0:
        seen[cur] = True
        for chi in G[cur]:
            if seen[chi]:continue
            st.append(~chi)
            st.append(chi)
    else:
        if ~cur != 0:
            if seen2[~cur]: continue
            seen2[~cur] = True
            ans.append(~cur + 1)

print(*ans)