首页 > 其他分享 >题解 P4778【Counting swaps】

题解 P4778【Counting swaps】

时间:2022-11-10 23:37:11浏览次数:74  
标签:10 Counting swaps 题解 置换 P4778 prod

problem

一次操作指随意选定 \(x,y\) 并交换 \(a_x,a_y\),请问有多少种方案,能用最少的操作次数重排一个排列 \(a\)?\(n\leq 10^5,P=10^9+7\)。

solution 0

连边 \(i\to a_i\),这是一张可以发起反攻的有向图,里面有很多个环,我们称这样的环为置换环。

引理一:对于一个 \(n\) 的置换环,完成对它的排序需要 \(n-1\) 次操作。

我们求出一个 \(f_i\) 表示大小为 \(i\) 的置换环排序的方案数,这是后文重点讨论内容,略之。

求出所有的置换环。因为环与环之间互不影响,相当于操作序列也互不影响,我们可以随意打乱环与环的相对顺序,这是多重集排列数(介绍见 ZROI371),记一个环的大小为 \(b_i\),则:

\[ans=\prod_i f_{b_i}\cdot \frac{\left(\sum_i(b_i-1)\right)!}{\prod_i (b_i-1)!}. \]

到这里复杂度还是线性的。

solution 1

标签:10,Counting,swaps,题解,置换,P4778,prod
From: https://www.cnblogs.com/caijianhong/p/solution-P4778.html

相关文章

  • 模拟与高精度题解
    此题目特征为储存数字超过longlong类型,c++无法用一个变量存储全部数字解法为开数组来储存各个位上的数字1.字符高精度直接以两种方式处理字符即可#include<bits/std......
  • 小姿势 之 Android Studio 3.5 Retry 问题解决
    总会有那么一个人,让你觉得这个世界一切都是值得的。纵使结果不尽人意,曾经拥有即是最好。前言家里的MBP静静地躺了一段时间,某天心血来潮想嗨起来,其实就是瞎折腾一把,结果......
  • 洛谷 P4423 [BJWC2011]最小三角形 题解
    求平面最近点对的时候有这样一种思路:将所有点全部绕原点旋转同一个角度,然后按横坐标排序。根据数学直觉,在随机旋转后,答案中的两个点在数组中肯定不会离得太远。把这种......
  • P4407 [JSOI2009] 电子字典 题解
    题目:P4407这题差不多就是P1688的改版。参考一下我在P1688的做法,我们继续使用Hash,然后只要考虑如何去重就好了。于是就有了这个暴力的想法:#代表修改,@代表添加,$代......
  • [AGC040F] Two Pieces 题解
    linkSolution这个题真的挺难的。/kk看了一个下午的题解才搞懂。/fn我们发现我们如果设状态\((x,d)\)表示前面的一个点在\(x\),另一个在\(x-d\),那么三种操作相当于:......
  • 题解 P3974【[TJOI2015]组合数学】
    postedon2022-10-2814:11:41|under题解|sourceproblem给出一个网格图,其中某些格子有财宝,每次从左上角出发,只能向下或右走。问至少走多少次才能将财宝捡完。此对......
  • 【题解】【切开字符串】
    P8631[蓝桥杯2015国AC]切开字符串Sol首先问题可以转化为对每个前缀求出本质不同奇回文子串数,和对每个后缀求出本质不同子串数和本质不同奇回文子串数。本质不同子......
  • simpread-(127 条消息) fastAPI 中的跨域问题解决_小童同学_的博客 - CSDN 博客_fasta
    本文由简悦SimpRead转码,原文地址blog.csdn.netCrossOrigin前言前端采用Vue,后端采用fastAPI的CV项目在开发时遇到跨域问题,记录学习过程与解决方案。概念C......
  • 体验 Python 剪辑视频以及相关问题解决, 一劳永逸!
    前言对于使用Python对视频进行剪辑我们最常用的就是Moviepy,我之前也写过一篇​​《必杀技--使用FFmpeg命令快速精准剪切视频》​​,这篇文章单纯使用的是FFmpeg,他是通过......
  • 题解 P8827 [传智杯 #3 初赛] 森林
    本题解提供两种做法。做法一为了叙述方便,先引入\(n\)级母树的概念。定义\(1\)级母树即为该子树被删去前,其所在的原来的完整的树。如下图,以\(5\)为根的一级母树......