Codeforces Global Round 20(F,H)

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 ij连一条边,连好边后可以得到 c n t cnt cnt个环,最终的操作数为 n − c n t n-cnt ncnt
假设我们有 [ 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 61
那么,只要我们有最少的环,就可以得到最大的操作次数
那么环有多少个?
如果一个环中,一个元素在环中出现的两次
也就是有环

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值