CF2033E.Sakurako, Kosuke, and the Permutation

普及/提高-

通过率:0%

AC君温馨提醒

该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

樱子的考试结束了,她表现得非常出色。作为奖励,她收到了一个排列 pp。小助因为有一门考试没及格,没有收到礼物,感到很不满。他决定偷偷溜进她的房间(多亏了她门锁的密码),把排列“破坏”成一个简单排列。

一个排列 pp 被称为简单排列,当且仅当对于每个 ii(1≤i≤n1\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] 不是。

每次操作,小助可以选择两个下标 i,ji, j(1≤i,j≤n1\le i, j\le n),交换 pip_i 和 pjp_j 的值。

樱子马上就要回家了。你的任务是计算小助最少需要进行多少次操作,才能将排列变成简单排列。

输入格式

第一行包含一个整数 tt(1≤t≤1041\le t\le 10^4),表示测试用例的数量。

每个测试用例包含两行。

  • 第一行包含一个整数 nn(1≤n≤1061\le n \le 10^6),表示排列 pp 的长度。
  • 第二行包含 nn 个整数 pip_i(1≤pi≤n1\le p_i\le n),表示排列 pp 的元素。

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

保证 pp 是一个排列。

输出格式

对于每个测试用例,输出一个整数,表示小助将排列变为简单排列所需的最小操作次数。

输入输出样例

  • 输入#1

    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

    输出#1

    0
    0
    2
    1
    0
    2

说明/提示

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

在第四个样例中,只需交换 p2p_2 和 p4p_4,排列就会变为 [2,1,4,3][2, 1, 4, 3],只需 11 次操作。

由 ChatGPT 4.1 翻译

输入解题思路,AI测评打分。不知道怎么写?

首页