QOJ.ac

QOJ

実行時間制限: 1 s メモリ制限: 512 MB 満点: 100

#2276. 报纸

統計

“Ulovi me, ulovi me, kupit ću ti novine!” ——这是克罗地亚儿童中流行的一首游戏歌谣,翻译过来就是“抓住我,我就给你买报纸”。

Ankica 和 Branko 在一个无向连通图上玩一个追逐游戏。具体来说,Branko 在图中移动,而 Ankica 试图抓住他。游戏按回合进行,每一回合包含以下步骤:

  • Ankica 对 Branko 的位置进行猜测。更准确地说,她猜测 Branko 当前位于某个特定的节点。如果她猜对了,Branko 就被抓住,游戏结束。否则,
  • Branko 沿着与他当前位置相连的一条边移动。换句话说,Branko 移动到他的一个邻居节点。注意,Branko 不能停留在当前位置。

给定一个图,确定 Ankica 是否有一种有限的策略,无论 Branko 如何移动以及他的起始位置在哪里,都能保证抓住他。

更正式地,我们将 Ankica 的策略表示为一个数组 $A = (a_1, a_2, \dots, a_k)$,其中 $a_i$ 表示 Ankica 在第 $i$ 回合的猜测(即她猜测 Branko 位于节点 $a_i$)。

类似地,我们将 Branko 的移动表示为一个数组 $B = (b_1, b_2, \dots, b_k)$,其中 $b_i$ 表示 Branko 在第 $i$ 回合开始前所处的节点。此外,对于任意两个连续的元素 $b_i$ 和 $b_{i+1}$ ($1 \le i < k$),图中必须存在一条连接节点 $b_i$ 和 $b_{i+1}$ 的边。注意,数组 $A$ 没有此限制。

如果 Ankica 的策略是成功的,即她在最多 $k$ 回合内抓住 Branko,那么对于每一个长度为 $k$ 的合法数组 $B$,都存在某个 $i$ ($1 \le i \le k$) 使得 $a_i = b_i$ 成立。

如果存在这样的策略,你应该找到一个使 $k$ 最小化的策略。

如果你能为 Ankica 提供一个成功但非最优的策略(即 $k$ 不是最小值的策略),你也可以在这一任务中获得部分分数。详见“子任务”部分。

输入格式

第一行包含两个整数 $N$ 和 $M$ ($N - 1 \le M \le \frac{N(N-1)}{2}$),分别表示图中的节点数和边数。图中的节点用 $1$ 到 $N$ 的整数表示。

接下来的 $M$ 行,第 $i$ 行包含两个空格分隔的整数 $u_i$ 和 $v_i$ ($1 \le u_i, v_i \le N, u_i \neq v_i$),表示一条连接节点 $u_i$ 和 $v_i$ 的无向边。

输入中不会出现重复的边,且图是连通的。

输出格式

如果 Ankica 没有成功的策略,直接在第一行输出 "NO" 并终止程序。

否则,第一行输出 "YES"。 第二行包含题目描述中的数字 $k$。 第三行包含题目描述中的 $k$ 个数字 $a_1, a_2, \dots, a_k$。

子任务

子任务 分值 数据范围
1 12 $1 \le N \le 20$
2 8 $1 \le N \le 1000, M = N - 1$, 每个节点 $u = 1, \dots, N - 1$ 都与节点 $u + 1$ 相连
3 80 $1 \le N \le 1000$

如果你的程序在特定测试用例的第一行正确输出了 "YES",但未能提供成功的策略,该测试用例将获得该子任务分值的 50%。

如果你的程序在第一行正确输出了 "YES" 并提供了一个成功但非最优的策略,该测试用例将获得该子任务分值的 75%。此外,为了获得这些分数,输出策略中的回合数 ($k$) 必须最多为 $5N$。可以证明,最优策略中的回合数不会超过 $5N$。

每个子任务的分数等于其所有测试用例中获得的最低分数。

样例

样例输入 1

7 6
1 2
1 3
1 4
1 5
1 6
1 7

样例输出 1

YES
2
1 1

说明 1

如果 Branko 最初位于节点 1,他将在第一回合被抓住。否则,他将在第二回合被抓住。

样例输入 2

6 6
1 2
2 3
3 1
1 4
2 5
3 6

样例输出 2

NO

说明 2

假设 Branko 的初始位置在节点 1、2 或 3 之中,且不同于 $a_1$。这些节点中的每一个都与另外两个相连,因此 Branko 在每一回合都有两个移动选择。至少有一个选择是安全的,所以 Ankica 没有成功的策略。

Figure 1. Graphs corresponding to Sample 1 and Sample 2

Editorials

IDTypeStatusTitlePosted ByLast UpdatedActions
EditorialOpen Official EditorialQingyu- Download

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.