题目描述
在本题中,提到“顺序”时,指的是 (1,2,…,N) 的一个排列。
给定一个排列 P=(P1,P2,…,PN)。
我们将满足以下条件的排列 Q=(Q1,Q2,…,QN) 称为“好排列”:
- 对于任意整数 1≤x≤N,通过任意次执行 x←Qx 这个替换操作,可以将 x 变为 1。
你可以对 P 进行如下操作若干次(可以为 0 次),使其变为一个好排列:
- 选择满足 1≤i<j≤N 的整数 i,j,交换 Pi 和 Pj。
设将 P 变为好排列所需的最小操作次数为 M,请你在对 P 进行 M 次操作后,输出所有可能得到的好排列中字典序最小的一个。
一个输入文件包含 T 组测试数据,请分别求解。
数列的字典序定义如下:设 S=(S1,S2,…,S∣S∣),T=(T1,T2,…,T∣T∣),∣S∣,∣T∣ 分别表示 S,T 的长度。S 字典序小于 T 当且仅当满足以下两条之一:
- ∣S∣<∣T∣ 且 $(S\_1,S\_2,\ldots,S\_{|S|})=(T\_1,T\_2,\ldots,T\_{|S|})$。
- 存在整数 1≤i≤min{∣S∣,∣T∣},使得以下两点都成立:
- $(S\_1,S\_2,\ldots,S\_{i-1})=(T\_1,T\_2,\ldots,T\_{i-1})$
- Si 小于 Ti(按数值比较)。
输入格式
输入从标准输入读入,格式如下:
T case1 case2 ⋮ caseT
每组测试数据格式如下:
N P1 P2 ⋯ PN
输出格式
请输出 T 行,第 i 行输出第 i 组测试数据的答案,即字典序最小的好排列,数之间用空格分隔。
样例 1
输入
5
4
2 1 4 3
5
2 1 3 4 5
2
1 2
2
2 1
9
4 3 6 2 7 1 9 8 5
输出
2 3 4 1
2 3 4 5 1
2 1
2 1
4 3 5 2 7 1 8 9 6
说明/提示
数据范围
- 1≤T≤105
- 2≤N≤2×105
- (P1,P2,…,PN) 是 (1,2,…,N) 的一个排列
- 每个输入文件中所有 N 的总和不超过 2×105
- 输入均为整数
样例解释 1
对于第 1 组测试数据,P 不是好排列。将 P1 与 P3 交换后,P=(4,1,2,3),此时 P 是好排列,M=1。另外,将 P2 与 P4 交换后,P=(2,3,4,1),这是用 M=1 次操作得到的好排列中字典序最小的,因此答案为该排列。
由 ChatGPT 4.1 翻译