编程题
### 问题描述 有一个排列 $p$ ,现在小 $L$ 可以不断地交换排列中的两个数,小 $L$ 想让这个排列变成一个单排列,但他不会求最少的操作次数,你可以帮帮他吗? 注意:单位排列指对于任意的 $i(1\leq i \leq n)$ ,满足 $p_i=i$ 的排列。 ### 输入格式 第一行一个正整数$T$,表示测试点数目。 对于每一个测试点,第一行一个数 $n$ ,表示排列长度。 接下来一行 $n$ 个数 $p_i$ ,表示排列。 ### 输出格式 对于每一个测试点,输出一行一个数,表示最少的交换次数。 ### 样例输入 ```text 5 3 4 2 5 1 ``` ### 样例输出 ```text 4 ``` ### 说明 一种可行的交换$4$次的方案为: $3~4~2~5~1 \rightarrow 1~4~2~5~3 \rightarrow 1~2~4~5~3 \rightarrow 1~2~3~5~4 \rightarrow 1~2~3~4~5$ ### 评测数据规模 对于 $50$% 的数据,满足 $n \leq 5$。 对于 $80$% 的数据,满足$n \leq 1000$。 对于 $100$% 的数据,满足 $1 \leq n \leq 100000,1 \leq T \leq 5$。
查看答案
赣ICP备20007335号-2