QOJ.ac

QOJ

时间限制: 1.0 s 内存限制: 1024 MB 总分: 100 可 Hack ✓

#9772. 排列路由

统计

Bobo 拥有一棵包含 $n$ 个顶点的树 $T = (V, E)$,初始时顶点 $i$ 上有一个数字 $p_i$,其中 $p_1, p_2, \dots, p_n$ 是 $1$ 到 $n$ 的一个排列,这意味着 $1$ 到 $n$ 的所有整数在 $p_1, p_2, \dots, p_n$ 中恰好出现一次。

在每次操作中,Bobo 可以选择一个匹配 $M \subseteq E$(匹配意味着 $M$ 中的任意两条边不共享公共顶点),并对于每一条边 $(u, v) \in M$,交换顶点 $u$ 和顶点 $v$ 上的数字(即交换 $p_u$ 和 $p_v$)。

Bobo 希望使用最多 $3n$ 次操作使得对于每个 $1 \le i \le n$ 都有 $p_i = i$,你能帮帮他吗?

输入格式

输入包含多组测试数据。第一行包含一个整数 $T$ ($T \ge 1$),表示测试数据的组数。对于每组测试数据:

第一行包含一个整数 $n$ ($1 \le n \le 1000$),表示树的顶点数。

第二行包含 $n$ 个整数 $p_1, p_2, \dots, p_n$ ($1 \le p_i \le n$,且 $p$ 是 $1$ 到 $n$ 的一个排列),表示顶点 $i$ 上的初始数字为 $p_i$。

接下来 $n-1$ 行,每行包含两个整数 $u, v$ ($1 \le u, v \le n, u \neq v$),表示 $u$ 和 $v$ 之间存在一条边。

保证所有测试数据的 $n^2$ 之和不超过 $10^6$。

输出格式

对于每组测试数据:第一行包含一个整数 $m$ ($0 \le m \le 3n$),表示你使用的操作次数。

接下来 $m$ 行,每行以一个整数 $0 \le k_i < n$ 开头,表示你在第 $i$ 次操作中选择的匹配包含的边数。随后是 $k_i$ 个整数 $t_{i,1}, t_{i,2}, \dots, t_{i,k_i}$,表示你选择的边的编号(边的编号按输入顺序从 $1$ 到 $n-1$ 编号)。

样例

输入 1

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

输出 1

4
2 4 3
1 1
1 2
1 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.