CF770C Online Courses In BSU

题目描述

现在你可以在 Berland State University 在线选修课程啦!Polycarp 需要通过 $k$ 门自己专业的主要在线课程,才能获得学位证书。总共有 $n$ 门课程可以选修。 情况因在线课程之间的依赖关系而变得复杂。对于每门课程,都有一份课程列表,表示在选修本课程前必须先通过的课程(该列表可以为空,表示没有限制)。 请帮助 Polycarp 以最少总课程数获得专业证书(即必须通过所有主修课程及其所需的所有前置课程)。编写程序输出修课顺序。 Polycarp 依次修读课程,在完成上一门课程后才能开始下一门课程。每门课程最多只能通过一次。

输入格式

第一行包含两个整数 $n$ 和 $k$($1 \leq k \leq n \leq 10^{5}$)——表示在线课程的总数和 Polycarp 专业主修课程的数量。 第二行包含 $k$ 个互不相同的整数,范围为 $1$ 到 $n$,表示 Polycarp 专业的主修课程编号。 接下来有 $n$ 行,每行描述一门课程:第 $i$ 行对应于课程 $i$。每行以整数 $t_i$ 开头($0 \leq t_i \leq n-1$),表示课程 $i$ 所依赖的课程数。接着是 $t_i$ 个互不相同的整数,范围为 $1$ 到 $n$,表示课程 $i$ 依赖的课程编号,顺序任意。保证没有课程会依赖自身。 保证所有 $t_i$ 的总和不超过 $10^{5}$。

输出格式

如果不存在获得专业证书的方法,则输出 $-1$。 否则,第一行输出整数 $m$——为获得专业证书所需通过的最少课程数。第二行输出 $m$ 个互不相同的整数,依次表示需要按先后顺序通过的课程编号。如果有多种答案,输出任意一种即可。

说明/提示

在第一个测试用例中,你可以先通过课程 $1$ 和 $2$,之后可以通过课程 $4$,然后可以通过主修课程 $5$。最后只需通过尚未通过的主修课程 $3$。 由 ChatGPT 5 翻译