QOJ.ac

QOJ

时间限制: 1 s 内存限制: 512 MB 总分: 100

#8730. 划分

统计

集合 $\{1, 2, \dots, N\}$ 的一个划分(对于某个给定的自然数 $N$)是指将该集合划分为若干个非空子集,使得 $1$ 到 $N$ 中的每个数恰好出现在其中一个子集中。例如,集合 $\{1, 2, 3, 4, 5\}$ 的一个划分由子集 $\{1, 3\}$、$\{2, 4\}$ 和 $\{5\}$ 组成。指定划分的一种方式是使用一个数字序列 $x_1, x_2, \dots, x_N$ ($1 \le x_i \le N$),规定当且仅当 $x_i = x_j$ 时,$i$ 和 $j$ 属于划分中的同一个子集。上述例子中的划分可以用序列 $1, 2, 1, 2, 3$ 表示,也可以用序列 $5, 1, 5, 1, 4$ 表示。

Patricija 拥有集合 $\{1, 2, \dots, N\}$ 的两个划分。第一个划分由序列 $a_1, a_2, \dots, a_N$ 给出,第二个划分由序列 $b_1, b_2, \dots, b_N$ 给出。Patricija 对以下问题感兴趣:如果可以使用上述两个划分中的所有子集,那么组成集合 $\{1, 2, \dots, N\}$ 的划分所需的最少子集数量是多少?

根据给定的 $k \in \{0, 1, 2\}$,需要完成以下任务:

  • 若 $k = 0$,需要求出上述问题的答案。
  • 若 $k = 1$,允许修改给定的 $2N$ 个数字中的至多一个。需要求出在至多修改一次后,上述问题的最小可能答案。换句话说,需要最小化组成划分所需的最少子集数量。
  • 若 $k = 2$,允许修改给定的 $2N$ 个数字中的至多一个。需要求出在至多修改一次后,上述问题的最大可能答案。换句话说,需要最大化组成划分所需的最少子集数量。

注意,当 $k = 1$ 或 $k = 2$ 时,修改后的数字必须在 $1$ 到 $N$ 之间。

请帮助 Patricija 编写一个程序来解决 $T$ 组这样的测试用例。

输入格式

第一行包含两个整数 $T$ 和 $k$,分别表示测试用例的数量和决定任务类型的参数。 接下来是 $T$ 组测试用例的描述。 每个测试用例以一个自然数 $N$ 开始,表示划分的大小。 接下来的两行分别包含序列 $a_1, \dots, a_N$ 和 $b_1, \dots, b_N$,它们定义了两个划分。

输出格式

对于每组测试用例,在单独的一行中输出问题的答案。

数据范围

在所有子任务中,满足 $1 \le T \le 200\,000$,$0 \le k \le 2$,且对于所有 $i = 1, 2, \dots, N$,$1 \le a_i, b_i \le N$。所有测试用例中 $N$ 的总和不超过 $200\,000$。

子任务 分值 数据范围
1 7 $k = 0, N \le 8$, 所有测试用例中 $2^N$ 的总和 $\le 10^5$
2 23 $k = 0$
3 15 $k = 1, N \le 1000$, 所有测试用例中 $N^2$ 的总和 $\le 10^6$
4 16 $k = 1$
5 19 $k = 2, N \le 1000$, 所有测试用例中 $N^2$ 的总和 $\le 10^6$
6 20 $k = 2$

样例

输入 1

2 0
4
1 1 2 3
1 2 3 3
7
1 1 1 1 2 3 4
1 2 3 4 4 4 4

输出 1

2
4

输入 2

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

输出 2

2
1
2

输入 3

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

输出 3

3
3
4

说明

第一个样例的解释: 对于第一个测试用例: 第一个序列定义的划分为 $\{1, 2\}, \{3\}, \{4\}$,第二个序列定义的划分为 $\{1\}, \{2\}, \{3, 4\}$。利用这些子集,我们可以构造出划分为 $\{1, 2\}$ 和 $\{3, 4\}$ 的两个子集。

对于第二个测试用例: 第一个序列定义的划分为 $\{1, 2, 3, 4\}, \{5\}, \{6\}, \{7\}$,第二个序列定义的划分为 $\{1\}, \{2\}, \{3\}, \{4, 5, 6, 7\}$。这两个划分中的任意一个都是最优的。

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.