QOJ.ac

QOJ

Limite de temps : 4.0 s Limite de mémoire : 512 MB Points totaux : 100 Hackable ✓

#17670. Kevin and Stones (Hard Version)

Statistiques

这是问题的困难版本。两个版本之间的区别在于,在这个版本中,如果存在合法的操作序列,你需要输出它。只有当你解决了这个问题的所有版本时,你才能进行 hack。

Kevin 有一个拥有 $n$ 个顶点和 $m$ 条边的无向图。最初,一些顶点上放有棋子,Kevin 想要将它们移动到新的位置。

Kevin 可以进行以下操作:

  • 对于每个位于 $u_i$ 的棋子,选择一个相邻的顶点 $v_i$。同时将每个棋子从 $u_i$ 移动到其对应的 $v_i$。

在任何时刻,每个顶点最多只能包含一个棋子。

确定是否存在一个合法的操作序列,能够将棋子从初始状态移动到目标状态。如果存在,输出一个步数不超过 $2n$ 的合法操作序列。可以证明,如果存在合法的操作序列,则一定存在一个步数不超过 $2n$ 的合法操作序列。

输入格式

每个测试点包含多个测试用例。第一行包含测试用例的数量 $t$ ($1 \le t \le 1000$)。接下来是测试用例的描述。

每个测试用例的第一行包含两个整数 $n$ 和 $m$ ($1 \le n \le 2000$, $0 \le m \le \min(\frac{n(n-1)}{2}, 10^4)$) —— 图中顶点和边的数量。

第二行包含一个由 '0' 和 '1' 组成的二进制字符串 $s$。$s$ 的第 $i$ 位表示初始状态下第 $i$ 个顶点上的棋子数量。

第三行包含一个由 '0' 和 '1' 组成的二进制字符串 $t$。$t$ 的第 $i$ 位表示目标状态下第 $i$ 个顶点上的棋子数量。

接下来的 $m$ 行,每行包含两个整数 $u$ 和 $v$ ($1 \le u, v \le n$) —— 表示第 $u$ 个顶点和第 $v$ 个顶点之间的一条无向边。

保证图是简单图。图中没有自环和重边。

保证 $s$ 和 $t$ 中 '1' 的数量相同。

保证所有测试用例中 $n$ 的总和不超过 $2000$。

保证所有测试用例中 $m$ 的总和不超过 $10^4$。

输出格式

对于每个测试用例,在第一行输出 "Yes" 或 "No",表示是否存在合法的操作序列。

你可以以任何大小写形式输出答案。例如,字符串 "yEs"、"yes"、"Yes" 和 "YES" 都会被识别为肯定的回答。

如果存在合法的操作序列,在第二行输出一个整数 $k$ ($0 \le k \le 2n$),表示操作的次数。假设初始状态下有 $c$ 个棋子。接下来的 $k + 1$ 行,每行应包含 $c$ 个互不相同的整数,分别表示操作前以及每次操作后棋子的位置。这些位置应当满足以下条件:

  • 第一行中的棋子位置与输入中的初始状态相匹配(顺序任意)。
  • 最后一行中的棋子位置与输入中的目标状态相匹配(顺序任意)。
  • 对于所有 $i$ ($1 \le i \le k$) 和 $j$ ($1 \le j \le c$),确保第 $i$ 行的第 $j$ 个整数和第 $i+1$ 行的第 $j$ 个整数在图中对应的顶点是相邻的。换句话说,棋子是从它上一次的位置移动到下一个位置的。

如果有多组解,输出其中任意一组即可。

样例

输入样例 1

4
2 1
10
01
1 2
11 11
11011001010
01101011100
1 2
2 3
3 4
4 5
5 6
6 7
7 8
8 9
9 10
10 11
11 1
3 2
110
101
1 2
2 3
3 2
111
111
1 2
2 3

输出样例 1

Yes
1
1
2
Yes
6
1 2 4 5 8 10
2 3 5 6 9 11
3 2 6 7 10 1
4 3 7 8 11 2
5 2 8 9 1 3
6 3 7 8 2 4
7 2 8 9 3 5
No
Yes
0
1 2 3

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.