QOJ.ac

QOJ

حد الوقت: 10 s حد الذاكرة: 1024 MB مجموع النقاط: 29 تفاعلية

#12492. 后手必胜

الإحصائيات

Ueli 和 Vreni 正在玩一个游戏。游戏的棋盘是一棵有 $N$ 个顶点的树,所有顶点初始时均为蓝色。他们轮流进行操作,Ueli 先手。在每一回合中,玩家必须选择一个蓝色顶点,以及该顶点任意数量(可以为零或全部)的蓝色邻居,并将这些顶点全部染成红色。如果在某位玩家的回合开始时,所有顶点都已经是红色,则该玩家输掉游戏,另一位玩家获胜。

在下方的示例游戏中,Ueli 在第一回合将顶点 3 染红。接着,Vreni 在她的回合选择了顶点 2,并将它及其邻居(顶点 1)染红。由于此时所有顶点均为红色,Ueli 输掉游戏,Vreni 获胜。

Ueli 和 Vreni 注意到,由于 Ueli 先手,他更容易赢得这个游戏。因此,他们采取了以下流程:首先,Ueli 选择一个整数 $N$。然后,Vreni 选择一棵有 $N$ 个顶点的树。接着,他们开始按照上述规则进行游戏,由 Ueli 先手。

Vreni 希望通过选择树来克服后手的劣势。你能证明 Vreni 如何在这种设置下赢得游戏吗?

输入格式

这是一个交互式问题。请确保你已阅读 FAQ 中关于交互式问题的相关信息。

程序首先需要读取一行包含一个整数 $T$,表示测试用例的数量。随后处理 $T$ 个测试用例。

对于每个测试用例,程序首先需要读取一行包含一个整数 $N$,即 Ueli 选择的顶点数量。然后,你的程序必须输出 $N - 1$ 行,描述 Vreni 应选择的树的边。树的节点编号为 $1$ 到 $N$。每一行必须表示树的一条不同边,包含两个 $1$ 到 $N$ 之间的整数:即该边连接的两个顶点。这些边必须构成一棵树。行内的两个整数顺序不限,行与行之间的顺序也不限。

之后,程序需要读取一行包含一个整数 $M$,表示你需要在这棵树上进行的对局数量。这些对局是独立进行的;换句话说,每局游戏开始时,树的所有顶点均为蓝色。

对于每一局游戏,你需要处理若干次交换,直到游戏结束。每次交换由每位玩家各进行一回合操作组成。

对于每次交换,程序首先需要读取两行描述 Ueli 的回合。第一行包含一个整数 $K$,表示要染红的蓝色顶点数量。第二行包含 $K$ 个不同的整数 $A_1, A_2, \dots, A_K$,描述要染红的蓝色顶点。$K$ 至少为 1,且每个 $A_i$ 都在 $1$ 到 $N$ 之间。顶点 $A_2, A_3, \dots, A_K$ 均为顶点 $A_1$ 的邻居。

之后,你的程序必须以相同的格式输出 Vreni 的回合选择:第一行输出要染红的蓝色顶点数量,第二行输出这些顶点的编号,顺序要求除第一个顶点外,其余顶点均为第一个顶点的邻居。

如果 Vreni 操作后所有顶点均为红色,则意味着 Vreni 获胜,该局游戏结束。如果还有后续对局,则立即开始下一局。如果这是该测试用例的最后一局,则立即开始下一个测试用例(如果有)。如果这是最后一个测试用例,裁判将不再发送任何输入,你的程序也不得再进行任何输出。

另一方面,如果 Ueli 操作后所有顶点均为红色,则意味着 Vreni 输了,因此你的程序未通过该测试用例。在这种情况下,裁判将输出一个整数 $-1$,且不会再进行任何输出,也不会处理后续的对局或测试用例。

如果裁判收到格式错误或无效的行(例如输出的整数数量不符、整数超出范围、输出的边不能构成树、尝试染红一个已经是红色的顶点,或尝试染红一个不是第一个被染红顶点的邻居),裁判也会输出一个整数 $-1$,且不会再进行任何输出。如果你的程序在收到 $-1$ 后继续等待裁判,程序将超时,导致 Time Limit Exceeded 错误。请注意,你有责任让程序及时退出以接收 Wrong Answer 判决,而不是 Time Limit Exceeded。通常情况下,如果超出内存限制或程序出现运行时错误,你将收到相应的判决。

裁判是确定性的。换句话说,如果你进行两次输出相同数字的尝试,你将从裁判那里得到相同的输入。当然,裁判在同一棵树的不同对局中可能会做出不同的选择。

数据范围

时间限制:60 秒。 内存限制:1 GB。 $1 \le M \le 50$。

测试集 1(可见判决) $T = 1$。 $N = 30$。

测试集 2(隐藏判决) $1 \le T \le 10$。 $31 \le N \le 40$。 没有两个测试用例使用相同的 $N$ 值。

样例

输入 1

2
3
1
3
4
2
3
2 1 3
2
2 3

输出 1

1 2
1 3
2
1 2
1
4
1
1

说明

请注意,样例交互并不满足任一测试集的数据范围,因为其 $N$ 值过小。它仅用于阐明输入和输出格式。

以下是 Case #2, Game #1 开始时及每回合后的示意图:

以下是 Case #2, Game #2 开始时及每回合后的示意图:

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.