QOJ.ac

QOJ

実行時間制限: 3 s メモリ制限: 2048 MB 満点: 100

#7850. 内核调度器

統計

你正在为新的操作系统开发调度模块。该模块接收 $n$ 个待执行的任务以及它们之间的依赖关系,并按特定顺序进行执行。

更正式地说,共有 $n$ 个任务,编号从 $1$ 到 $n$。你还获得了 $m$ 个依赖关系,编号从 $1$ 到 $m$;第 $i$ 个依赖关系由两个数字 $a_i$ 和 $b_i$ 描述,表示任务 $a_i$ 必须在任务 $b_i$ 之前执行。

在某些情况下,会出现循环依赖——即根据给定的依赖关系,任务 $t_1$ 必须在 $t_2$ 之前执行,$t_2$ 在 $t_3$ 之前执行,以此类推,直到 $t_{k-1}$ 在 $t_k$ 之前执行,且 $t_k$ 在 $t_1$ 之前执行。循环依赖会给调度带来问题,因此你决定删除部分给定的依赖关系,使得剩余的依赖关系集合中不包含任何循环。

然而,你仍然需要保留至少 $m/2$ 个原始依赖关系,以保留部分原始信息。请编写程序完成此任务。

输入格式

  • 第一行包含两个数字 $n$ 和 $m$ ($2 \le n \le 10^5$, $1 \le m \le 3 \cdot 10^5$)。
  • 接下来 $m$ 行,每行包含两个数字 $a_i$ 和 $b_i$ ($1 \le a_i, b_i \le n, a_i \neq b_i$),描述任务 $a_i$ 和 $b_i$ 之间的对应依赖关系。

输出格式

如果存在满足条件的依赖关系子集,第一行输出 YES,否则输出 NO

若输出 YES,第二行应包含所选依赖关系的个数 $k$(请注意 $k$ 必须至少为 $m/2$),第三行应包含 $k$ 个数字,即所选依赖关系的编号。编号按照输入中给出的顺序从 $1$ 到 $m$ 进行标识。

样例

样例输入 1

3 3
1 2
2 3
3 1

样例输出 1

YES
2
1 2

样例输入 2

2 5
1 2
1 2
1 2
2 1
2 1

样例输出 2

YES
3
1 2 3

样例输入 3

4 4
1 2
2 3
2 4
3 4

样例输出 3

YES
4
1 2 3 4

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.