トポロジカルソート. 本問題は DFS, BFS どちらでも可能である. どちらでも良いときは,DFS の方が実装が軽いケースが多い.
DFS のトポロジカルソートは,帰りがけ順で vertex を並べて, 最後に reverse.
試験本番では BFS で実装した. どこが間違っているのか分からなかった. 複数方法を持っていれば,一方が WA でももう一方で通せる可能性がある. 試験本番では,BFS に拘ってしまい,通せなかった.
BFS によるトポロジカルソートの場合, 単に reverse ではダメらしい. https://atcoder.jp/contests/abc315/editorial/6989
使っている記号,マクロ等 "https://ecsmtlir.hatenablog.com/entry/2022/12/23/131925"
int main() {
ll n;
cin >> n;
vvll to(n);
rep(i,n){
ll c; cin >> c;
vll p(c);
rep(j,c) {
cin >> p[j]; --p[j];
to[i].push_back(p[j]);
}
}
vll ans;
vll vis(n);
if(vis[cu]) return;
vis[cu] = true;
for(auto ne: to[cu]) {
dfs(dfs, ne, cu);
}
};
dfs(dfs, 0);
coutv(ans);
return 0;
}