AT_abc436_e.[ABC436E] Minimum Swap

普及/提高-

通过率:0%

AC君温馨提醒

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

题目描述

给定一个整数序列 P=(P1,P2,…,PN)P=(P_1,P_2,\ldots,P_N),它是 (1,2,…,N)(1,2,\ldots,N) 的一个排列。这里保证 PP 不等于 (1,2,…,N)(1,2,\ldots,N)。

你希望执行以下操作零次或多次,使 PP 匹配序列 (1,2,…,N)(1,2,\ldots,N):

  • 选择一对满足 1≤i<j≤N1\le i<j\le N 的整数 (i,j)(i,j),交换 PiP_i 和 PjP_j 的值。

设 KK 为使 PP 匹配序列 (1,2,…,N)(1,2,\ldots,N) 所需的最小操作数。

求在 KK 次操作中,可以作为第一个操作的操作数。两个操作被视为不同,当且仅当所选的整数对 (i,j)(i,j) 不同。

输入格式

第一行一个整数 NN。

第二行 NN 个整数,表示 P1P_1 P2P_2 …\ldots PNP_N。

输出格式

输出答案。

输入输出样例

  • 输入#1

    5
    3 1 4 2 5

    输出#1

    6
  • 输入#2

    2
    2 1

    输出#2

    1
  • 输入#3

    20
    15 5 13 17 9 11 20 4 14 16 6 3 8 19 12 7 10 18 2 1

    输出#3

    77

说明/提示

样例解释 1

例如,目标可以在三步内实现:

  • 选择 (i,j)=(1,2)(i,j)=(1,2)。PP 变为 (1,3,4,2,5)(1,3,4,2,5)。
  • 选择 (i,j)=(2,4)(i,j)=(2,4)。PP 变为 (1,2,4,3,5)(1,2,4,3,5)。
  • 选择 (i,j)=(3,4)(i,j)=(3,4)。PP 变为 (1,2,3,4,5)(1,2,3,4,5)。

目标不能在两步或更少步骤内实现,因此 K=3K=3。

如上所述,选择 (1,2)(1,2) 作为第一步操作可以在三步内实现目标。此外,如果选择 (1,3),(1,4),(2,3),(2,4),(3,4)(1,3),(1,4),(2,3),(2,4),(3,4) 中的任意一个作为第一步操作,通过适当执行后续两步操作,可以使 PP 等于 (1,2,3,4,5)(1,2,3,4,5)。

因此,输出 6。

数据范围

Constraints

  • 2≤N≤3×1052\le N\le3\times10 ^ 5

  • 1≤Pi≤N (1≤i≤N)1\le P _ i\le N\ (1\le i\le N)

  • Pi≠Pj (1≤i<j≤N)P _ i\ne P _ j\ (1\le i\lt j\le N)

  • 所有输入值均为整数

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

首页