CF1530D Secret Santa

题目描述

每年十二月,VK 公司都会为员工举办一个名为“Secret Santa”的传统活动。活动规则如下: 有 $n$ 名员工,编号从 $1$ 到 $n$。每位员工 $i$ 会被分配给另一位不同的员工 $b_i$,员工 $i$ 需要为 $b_i$ 准备新年礼物。每位员工都只会被分配给一位其他员工,且不会分配给自己(但两名员工可以互相分配)。形式化地说,所有 $b_i$ 必须是 $1$ 到 $n$ 之间的不同整数,并且对于任意 $i$,都满足 $b_i \ne i$。 分配通常是随机生成的。今年作为实验,所有参与者都被询问希望给谁送礼物。每位员工 $i$ 表示希望送给员工 $a_i$。 请你找到一个有效的分配方案 $b$,使得员工的愿望被满足的数量最大。

输入格式

每个测试点包含多组测试用例。第一行包含一个整数 $t$($1 \le t \le 10^5$),表示测试用例的数量。 每个测试用例包含两行。第一行包含一个整数 $n$($2 \le n \le 2 \cdot 10^5$),表示参与活动的员工人数。 第二行包含 $n$ 个整数 $a_1, a_2, \ldots, a_n$($1 \le a_i \le n$,$a_i \ne i$),表示每位员工的心愿。 保证所有测试用例中 $n$ 的总和不超过 $2 \cdot 10^5$。

输出格式

对于每个测试用例,输出两行。 第一行输出一个整数 $k$($0 \le k \le n$),表示你分配方案中被满足的愿望数。 第二行输出 $n$ 个不同的整数 $b_1, b_2, \ldots, b_n$($1 \le b_i \le n$,$b_i \ne i$),表示分配给每位员工的对象。 $k$ 必须等于满足 $a_i = b_i$ 的 $i$ 的数量,并且要尽可能大。如果有多种答案,输出任意一种均可。

说明/提示

在第一个测试用例中,有两种有效的分配方案:$[3, 1, 2]$ 和 $[2, 3, 1]$。前者满足了两个人的愿望,后者只满足了一个。因此 $k=2$,唯一正确的答案是 $[3, 1, 2]$。 由 ChatGPT 4.1 翻译