反演与容斥
反演
假设有两个函数
一般情况下,求反演只能高斯消元,但是有一些形式的反演有巧妙解法.
子集反演
一般形式:
证明:
不难发现,这个子集反演也就相当于在做高维前后缀和.
Example1(2019zrpzt七连day1D)
根据子集反演,设
做一遍高维前缀和就好,复杂度
Example2(有标号DAG计数)
设
这样我们每次枚举删去这
等一下咧,这复杂度
好像转移优化不太了,因为果然OI就是发现限制太强了就弱一点,发现太弱了就强一点,所以我们想办法把它放弱一点.
一个经典的方法是:我们把定义改为至少当然能不能推到最后是另一回事.
我们设
对第二个式子用子集反演,有:
接下来使用反复带入大法:
可以发现:我们在推式子的过程中,将和集合本身有关的性质转化为了只和集合大小有关的式子,于是就简化了大量运算.
接下来我们继续化简:
注意到复杂度已经降到
上面是从集合的角度一步步分析得到的.但如果你直接从容斥的角度考虑,忽略掉那个
也就是直接设,然后钦定其有至少
二项式反演
一般形式:
显然以
Example1(错排问题)
设
如果知道
显然就是一个二项式反演,
值得一提的是,我们再观察一下最后得到的错排公式并进行一定的化简,可以得到:
不难发现
用一些我不会的方法分析误差,会发现后面的项所能带来的误差很小,于是有
另外,观察
下面证明
Example2(CF1750G)
如果没有字典序限制就是经典的二项式反演:考虑能被分为
而有字典序限制也很经典,枚举LCP,枚举下一个位置,这个时候值域被分为若干个区间,假设剩了
这种问题通常LCP后的下一个位置都可以规避,这里你发现不同的取值只会让后面的
Example3(CF1228E)
不妨设至多有
令
写到这里发现一个问题(其实是我发现问题后把上面原本写错的给改了),为啥
做子集反演:
把集合改成集合大小就可以发现问题所在:
换句话说,
啥?这和我平常接触的二项式反演不一样啊?不说别的,第四题(BZOJ2839)的式子是这样的:
冷静一下,二项式反演的公式肯定没错,那也就一定是下面这几句出现了问题:
这个问题其实非常显然,我们的
这样才是在不确定的那些行列中选择组合数,而不是在确定的那些行列中选.
但这样又有一个问题,就是这个题的特殊性,这个题要求
当然不一样,二项式反演讲究统一性,所有的定义必须遵循一个统一的原则,不然如果什么样子的函数都能反演,那一般的反演就不是一个需要解方程才能完成的东西了.
回到第四题,再看一遍这个式子:
这个定义式就非常良性,
回到这个题上,为什么我们最后把
再看看这个式子:
这个式子的右边在干这样一件事:那就是在已知
所以,实际上的
好麻烦啊,能不能避免这种需要进一步思考集合意义的问题呢?
考虑二项式反演的第二个形式:
不难发现这个式子无论怎么写,前后都一定是从已知集合中选东西.绝对不会出现上面的问题.
因此,我们重新写一下这个题的相关式子,考虑直接正难则反,设
最后答案就是
斯特林反演
一般形式:
考虑第一类斯特林数和第二类斯特林数的对称性,只需证明第一个和第三个式子即可.
反转公式:
第一个式子的证明:
第三个式子的证明:
莫比乌斯反演
一般形式:
第一个式子的证明:
注意到
第二个式子的证明:
第三个式子的证明:
Example1
求长度为
不妨设
有
Example2
求
我们通过这个题来讲一下推导技巧.
增加枚举量
交换枚举顺序
分离无关变量
考虑使用数论分块,只需处理出
Example3
求
和上一道题几乎没区别,唯一不同的是需要处理的函数从
Example4
求
考虑增加枚举量,则:
于是转化为上一道题,但复杂度仍不可接受.
换元
考虑设
Example5([UR #5]怎样跑得更快)
首先先考虑去掉
显然可以构造函数
可以求出
则原式即:
令
这个也是一个莫比乌斯反演的形式,我们可以求出左边,进而求出
而
无解条件显然是
简而言之,这个题的步骤就是:
-
通过增加枚举量消掉
以及 这些难以处理的项. -
将
与 尽量分到式子两边. -
先通过莫比乌斯反演求出一些值,再通过这些值反推.
Example6([CF1566H]Xor-quiz)
首先注意到一个重要的事实:我们只需要询问所有
注意到一个事实是,异或是模意义下的按位加减法,这意味着我们可以对异或做莫比乌斯反演.事实上,我们有:
注意到
接下来只要我们形式上写作
注意一个事实:如果我们设
反演,有
现在的问题在于:对于数
然后是根据数据随机,拿每个集合的线性基随机一下自由元,然后对着构造.多随机几次,最后做背包.
多重子集反演
设
一般形式:定义
证明:
根据莫比乌斯反演,这个是显然的.
单位根反演(离散傅里叶变换)
一般形式(
可以发现这个式子其实就是FFT时所做的DFT与IDFT.
一般情况
考虑莫比乌斯反演的过程,我们实际上使用的是
令
令
刚才的过程相当于:
无论是二项式反演还是莫比乌斯反演,他们都满足
根据上面的情况,我们发现
现在来推导满足
不妨设算子
即
由上我们发现,反演解决了一些在下标上的二元运算卷积:
而我们需要把
容斥
一般形式
即:将求并集中元素个数转化成了求交集中元素个数.
我们有:
证明:我们考虑对于每个元素,看它对最终答案的贡献.假设它所属
显然,当这个元素被包含的时候,贡献为
如果我们定义一类在集合上的函数
另外,我们上面的做法是:当交集好求时求并集.我们还可以使用一步补集转化:
这样我们同样可以在并集好求的时候求交集.
会发现容斥和二项式反演是很像的.但是不一样的是,容斥是从集合的角度考虑,更注重单个元素的贡献;二项式反演是从函数的角度考虑,更关注函数之间的转化.
Example1(不定方程非负整数解计数)
考虑不定方程
首先,我们需要找出全集
-
是满足 的所有非负整数解; -
对于每个变量
,都对应一个 .
设所有满足
欸,等一下,咋想到的补集转化,又是咋想到要用容斥的捏?
我们冷静一下,首先补集转化和容斥都是一个思想:正难则反.我们要求满足条件的个数,就先想一下能不能求不满足条件的个数,然后拿总的个数减去.然后注意到不满足条件的意义是:有至少一个不满足,这样就很可以容斥了.
Example2(错排问题)
我们考虑从容斥的角度再次认识一下错排.
首先,我们需要找出全集
-
是长度为 的所有排列; -
对于每个变量
,都对应一个 .
注意到所求仍然是
Example3(bzoj3622已经没有什么好害怕的了)
首先可以用dp+双指针得到
我们接下来仍然考虑容斥,首先,我们需要找出全集
等一下,这个好像不好刻画?
我们先回归一下容斥的本质:考虑每个元素的贡献.注意到恰好
等一下,这也太麻烦了,就不能从集合的角度分析嘛?
冷静一下,如果我们要做容斥,我们必须考虑每个元素单独的贡献,但是在这个题中,每个元素并没有单独的贡献,而是整个集合需要满足性质才能贡献.也就是说,我们无法分析每个
换句话说,这个定义在集合上的函数并不满足可加性.
换句话说,我们要用容斥,就一定要刻画
再换句话说,大部分的所谓的容斥其实都和集合没啥关系,我们做容斥就是需要逐个考虑贡献,把它们贡献全都杀成
Example4(HAOI2008硬币购物)
如果直接对于每次询问暴力做,复杂度显然是
注意到硬币数量很少,并且每个硬币的贡献可以独立计算.我们完全可以刻画
Example5
Alice和Bob在玩游戏,他们有一个
一开始抄题的时候没有写染色而是直接写"设
但是这样好像还是不太好做,毕竟现在我们面对的还是一个难以转化为计数问题的图论问题,只是把问题的单位元素从图变成了连通块.那我们能不能再进一步:把单位元素换成单点呢?
考虑由于连通块要染一种颜色,那
接下来就可以写式子了,令
冷静一下!这个东西和容斥长得那叫一个一模一样啊.我们看看能不能逆向分析出
Example6
求
考虑这么一个事实:假设
Example7(AGC058D)
直接容斥好像不太可做,我们把容斥中的条件改为有多少个极长的形如
乍一看这个极长的条件好像巨难满足,但实际上我们冷静一下,我们只需要满足这个串长度大于等于
拿组合数算一算.
Example8(AGC035F)
显然问题只在于重复计算的问题.我们先将所有状态做一个双射:对于一个网格,唯一可能被重复计算的只可能是一个拐角的
然后捏?注意到这样的话一个拐角的角一定是行了,是列就一定不合法,我们考虑把不合法的列杀了.
于是做一下容斥,答案是
Example9
给定若干个限制条件
首先
这咋办.一个办法是:我们考虑容斥,先随便放进去,最后再钦定若干个自己成环.诶等一下为啥这个容斥是对的?因为系数是
当然,也可以考虑先把其它的合并,最后做长度为
Example10([AGC036F] Square Constraints)
由题意得:
当一个东西有上界又有下界的时候可以想到容斥.问题转化为只有上界.假设最后所有的上界为
但是这个东西和容斥怎么结合起来呢?我们将限制放到二维平面上,注意到上下界的限制其实是两个
Example11([23省选第一轮集训day4]C带劲的旅行)
(下面将
设
首先注意到期望
考虑如何计算
Example12
给定
著名结论:
然后就做完了,每次暴力合并若干个颜色相同的块,容斥系数
容斥是一个层层递进的东西,我们每一步都是基于上一步的限制:它本身就是一个求解集的东西.
Min-Max容斥
对于:
考虑一个特例:
由于是集合,这个式子在期望意义下同样成立:
进一步,这个式子可不止能求min-max的转化,它可以求出集合中第k大的数字:
原理是消掉前
Example1([23省选10连测 day6]A)
不妨设
设
于是:
注意到
这里已经不难写出
那么怎么优化呢?设
如何处理这个事情?我们用类似多项式的东西,前者相当于平移多项式系数,后者相当于标量乘法,然后拿线段树维护和,复杂度
反射容斥
一般形式:给定二维平面上两个点
我们不妨设
最后的答案就是随便走
考虑设步数为
评论