F1. Array Shuffling
题意:
给你长度为 n n n的数组 a a a,请你用 a a a的排列构造出一个新的数组 b b b,你可以任意交换数组 b b b上的任意两个元素,要求用数组 b b b通过交换,复原数组 a a a所需要的次数最多,构造出这个 b b b
思路:
一个结论:如果 b i b_i bi可以移动到 b j b_j bj的位置,则可以将点 i ∼ j i \sim j i∼j连一条边,连好边后可以得到 c n t cnt cnt个环,最终的操作数为 n − c n t n-cnt n−cnt
假设我们有 [ 1 , 2 , 3 , 4 , 5 , 6 ] [1,2,3,4,5,6] [1,2,3,4,5,6]变为 [ 6 , 1 , 2 , 3 , 4 , 5 ] [6,1,2,3,4,5] [6,1,2,3,4,5]
一个环,所以操作数 6 − 1 6-1 6−1次
那么,只要我们有最少的环,就可以得到最大的操作次数
那么环有多少个?
如果一个环中,一个元素在环中出现的两次
也就是有环