QOJ.ac

QOJ

実行時間制限: 3.0 s メモリ制限: 1024 MB 満点: 100 ハック可能 ✓

#10426. 管理集群

統計

你需要编写一个集群管理器扩展来提升产品性能。你的产品拥有 $n$ 个服务(编号从 $1$ 到 $n$),部署在一个包含 $2n$ 台机器(编号从 $1$ 到 $2n$)的集群上。每个服务恰好运行两个副本。每台机器恰好运行某个服务的一个副本。

集群性能的关键因素之一是网络。部分机器对之间有直接连接,可以非常高效地传输数据。集群中共有 $2n - 1$ 条直接连接,且任意两台机器之间都可以通过直接连接进行数据传输。换句话说,这些直接连接构成了一棵树。

在部署期间,所有 $2n$ 个副本已被分配到各台机器上。你的扩展程序会获取直接连接列表以及序列 $a_1, a_2, \dots, a_{2n}$,其中 $a_i$ 表示将在机器 $i$ 上运行的服务编号。你的扩展程序可以交换机器之间的部分副本。交换操作选取两台机器 $i, j$,并交换 $a_i$ 和 $a_j$ 的值。每台机器最多只能参与一次交换操作。你的扩展程序应执行若干次交换操作,以使集群性能最大化。

由于大部分数据是在同一服务的两个副本之间传输的,因此集群性能定义为:两个副本运行在直接相连的机器上的服务数量。请编写该扩展程序以最大化集群性能。

输入格式

第一行包含一个整数 $T$ ($1 \le T \le 10^5$),表示测试用例的数量。接下来是各测试用例的描述。

每个测试用例的第一行包含一个整数 $n$ ($1 \le n \le 10^5$)。

第二行包含 $2n$ 个整数 $a_1, a_2, \dots, a_{2n}$ ($1 \le a_i \le n$)。保证序列中 $1$ 到 $n$ 的每个值恰好出现两次。

接下来的 $2n - 1$ 行,每行包含两个整数 $u$ 和 $v$ ($1 \le u, v \le 2n, u \neq v$),表示机器 $u$ 和 $v$ 之间有直接连接。保证直接连接构成一棵树。

保证所有测试用例的 $n$ 之和不超过 $10^5$。

输出格式

对于每个测试用例,第一行输出一个整数 $k$ ($0 \le k \le n$),表示你希望执行的交换操作次数。

接下来的 $k$ 行,每行包含两个整数 $i, j$ ($1 \le i, j \le 2n, i \neq j$),表示一次交换操作。每个编号 $1$ 到 $2n$ 在输出中最多出现一次。

注意操作顺序并不重要。应用交换操作后,集群性能应达到最大值。你可以输出任何满足要求的答案。

样例

样例输入 1

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

样例输出 1

1
1 3
3
1 5
8 3
4 7
0

说明

在第一个测试用例中,只有服务 2 的副本运行在直接相连的机器上,因此性能为 1。通过交换机器 1 和 3 上的副本,性能可以提升至 2。

在第二个测试用例中,没有服务有两个副本运行在直接相连的机器上,因此性能为 0。通过执行交换 $1-5$、$8-3$ 和 $4-7$,使得服务 2、3 和 4 的副本运行在直接相连的机器上,性能可以提升至 3。可以证明在该用例中无法达到性能 4。

在第三个测试用例中,只有服务 1 的副本运行在直接相连的机器上,因此性能为 1。显然,该用例的性能无法进一步提升。

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.