#CF2033E. Sakurako, Kosuke 与排列

    ID: 7033 传统题 1000ms 256MiB 尝试: 1 已通过: 1 难度: 8.5 上传者: 标签>数据结构数据结构暴力DFS与类似算法并查集图论贪心*1400

Sakurako, Kosuke 与排列

E. Sakurako, Kosuke 与排列
每个测试的时间限制:2 秒
内存限制:256 兆字节

Sakurako 的考试结束了,她表现得非常出色。作为奖励,她收到了一个排列 pp
Kosuke 并不完全满意,因为他有一门考试没通过,没得到礼物。他决定借助她的门锁密码潜入她的房间,把排列搞乱,使其变得 简单

如果一个排列 pp简单 的,则对于每个 ii1in1 \le i \le n),以下两个条件之一成立:

  • pi=ip_i = i
  • ppi=ip_{p_i} = i

例如,排列 [1,2,3,4][1,2,3,4][5,2,4,3,1][5,2,4,3,1][2,1][2,1] 是简单排列,而 [2,3,1][2,3,1][5,2,1,4,3][5,2,1,4,3] 不是。

在一次操作中,Kosuke 可以选择两个索引 i,ji, j1i,jn1 \le i, j \le n),并交换 pip_ipjp_j

Sakurako 马上就要回家了。你的任务是计算 Kosuke 需要的最少操作次数,使得排列变成简单排列。

输入
第一行包含一个整数 tt1t1041 \le t \le 10^4)——测试用例的数量。

每个测试用例包含两行:

  • 第一行包含一个整数 nn1n1061 \le n \le 10^6)——排列 pp 的长度。
  • 第二行包含 nn 个整数 pip_i1pin1 \le p_i \le n)——排列 pp 的元素。

保证所有测试用例的 nn 之和不超过 10610^6

保证 pp 是一个排列。

输出
对于每个测试用例,输出使排列简单所需的最少操作次数。

示例
输入:

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

输出:

0
0
2
1
0
2


在第一个和第二个样例中,排列已经简单。

在第四个样例中,只需交换 p2p_2p4p_4,排列变为 [2,1,4,3][2,1,4,3],用了 11 次操作。