Cry_For_theMoon  

前言

组合意义天地灭,代数推导保平安。

引入

例1:树上背包

给出一颗树,点数为 \(n\)。对于每条边,可以选择断或不断。

一个局面的权值是形成的所有连通块的大小的乘积,求 \(2^{n-1}\) 种局面的权值的和,模 \(998244353\)

\(n\le 10^6\)

分析

容易想到,设 \(f(u,x)\) 表示 \(u\) 子树内,且 \(u\) 所在连通块大小为 \(x\) 的答案。

我们知道,这样直接进行合并需要 \(n^2\) 的时间(而且必须在上下界都卡紧的情况下)。

组合意义横空出世:一个局面的权值,等于从每个连通块选出恰好一个点的方案数。因此设 \(f(u,0/1)\) 表示 \(u\) 子树内,且 \(u\) 所在连通块有(没有)选出一个点的情况下,所有答案之和。

时间复杂度即为 \(O(n)\)

思想

其实,说白了也就是利用所谓的乘法原理,给一些代数式赋上了组合的意义。

如果 \(\sum_{i=1}^{k}a_i=n\),那么 \(\prod_{i=1}^{k}a_i\)可能会有一些意义:放在序列上,那么就是劈成若干段,每段选一个点;放在树上,那就是断成若干个连通块,每块选一个点。一般的图上,则似乎没有比较良好的用来划分的性质,目前我的一个想法,可能是在 dag 上,按照拓扑分层划分,然而还没有遇到相关题目。

\(\sum_{i=1}^{k}a_i\) 这个式子常出现在图联通方案数中:假设点有标号,已经存在 \(k\) 个连通块,设 \(k\) 个连通块和为 \(n\),大小为 \(a_1,a_2,...,a_n\),那么添加 \(k-1\) 条边使得图联通的方案数为 \(n^{k-2}\prod_{i=1}^{k}a_i\)

需要注意的是,这里的连通块也未必是树的形态:比如说,可以是双连通分量形态,则我们加入的 \(k-1\) 条边就全部是割边;事实上最后得到的就会是一张无向图的 dfs 树。

这一方面的内容就到此为止;另外的一个大类应用是平方(\(k\) 次方):如果一个长度为 \(n\) 的序列贡献为 \(n^2\),则其贡献等价于从这个序列里先后选出两个点(可以重复选)的方案数。

事实上,用组合意义解决问题,并不拘泥于形式,凡是有难以处理的乘积,不妨都想一想能否赋予其组合意义。

下面是其一些应用。

例2:segment

考虑一个长度为 \(x\) 的连续段,贡献为 \(x^k\);对于长度为 \(n\) 的,值域 \([1,m]\) 的正整数序列,定义其权值为所有极长连续相同段的贡献的乘积
,对所有合法序列求权值和模 \(998244353\) 的结果。

\(n\le 10^{18},k\le 300\)

分析

\(k\) 次方就是上面的应用:选 \(k\) 个点。

因此设 \(f(i,x)\) 是确定了 \(1\sim i\)\(i\) 所在的极长连续段选了 \(k\) 个点中的 \(x\) 个出来,\(f(n,k)\) 就是我们想要的。

显然转移可以写成矩阵快速幂的形式,时间复杂度 \(O(k^3\log n)\)

例3:妄想(from Alpha1022)

给出一个 \(n\) 点简单图的补图,保证原图每个点的度数 \(\ge n-3\),对生成树计数,模 \(998244353\)

\(n\le 10^6\)

分析

原图很困难,补图很简单:有若干个链和简单环构成,所以启发我们在补图考虑。

显然就是要求补图的边都不能出现,不妨转成容斥问题:钦定一些边出现,然后剩下的边无所谓。

此时利用 \(n^{k-2}\times \prod_{i=1}^{k}a_i\) 即可。

值得一提的是利用这个公式的时候,特别是在组合意义的时候,往往把 \(n^{-2}\) 提出来,然后把后面乘积变成 \(na_i\) 的乘积。

考虑链是简单的,环的话,随便找一条边讨论一下它有没有被选就可以断环了,时间复杂度 \(O(n)\)

在解决了上面两个问题以后,我们来做一道对能力要求比较高的题。

例4:数树

题目链接

Task1

考虑两个树形态确定的情况,容易发现那个“路径”的约束是诈骗,实质上,变成了如果 \((u,v)\) 这条边同时在两棵树出现,那么 \(u\)\(v\) 颜色相同。

也就是说考虑两棵树的边集的交,设为 \(S\),则有 \(n-|S|\) 个连通块,\(y^{n-|S|}\) 就是答案。

Task2

现在一棵树已经确定了,我们沿用上面的结论。

在这个确定的树(边集为 \(E_1\))上,我们希望划分出若干个连通块,且钦定在第二棵树(边集为 \(E_2\))上他们也是联通的。

利用图联通方案数的公式,我们可以容易计算出一个方案数,同时容易想到未来可以用组合意义去优化。

问题在于,我们无法保证这是一个“恰好”的关系,换言之我们从 \(E_1\) 中划分出了两个连通块 \(a_1,a_2\),你可以在 \(E_2\) 中让 \(a_1\) 的点还是联通的,\(a_2\) 的点还是联通的,但你不能保证 \(E_1\) 中连接 \(a_1,a_2\) 的那条唯一的边在 \(E_2\) 中就不存在。

这让我们想到容斥。更形式化的表述是:我们只能钦定 \(E_1\cap E_2\) 的一个子集,而不能钦定 \(E_1\cap E_2\) 本身,这类表述很自然引进了容斥。

考虑设 \(f(S)\)\(S=E_1\cap E_2\) 的方案数,\(g(S)\)\(S\subseteq E_1\cap E_2\) 的方案数,我们用图联通方案数能求的是 \(g\);由容斥原理得:

\[f(S)=\sum_{S\subseteq T}(-1)^{|T|-|S|}g(T) \]

我们要求的是:

\[\sum_{S\subseteq E_1} f(S)\times y^{n-|S|} \]

首先很自然把 \(y^{n}\) 提出来,然后把 \(f\)\(g\) 代替掉:

\[y^{n}\times \sum_{S\subseteq E_1}y^{-|S|}\sum_{S\subseteq T}(-1)^{|T|-|S|}g(T) \]

做任何推导,提取公因数往往是不会错的选择:这里我们把最内层的那个 \((-1)^{-|S|}\) 提取出来:

\[y^{n}\times \sum_{S\subseteq E_1}(-y)^{-|S|}\sum_{S\subseteq T}(-1)^{|T|}g(T) \]

交换 \(S,T\) 求和顺序(这一步纯粹是一个感觉)

\[y^{n}\times \sum_{T\subset E_1}(-1)^{|T|}g(T)\sum_{S\subseteq T}(-y)^{-|S|} \]

首先发现后面的那一坨只和 \(|T|\) 有关,拿出来单独看看呢?

\[\sum_{j\le i}\dbinom{i}{j}(-y)^{-j} \]

所以令 \(p=(-y)^{-1}\),则后面一坨就是 \((p+1)^{|T|}\) 哦。

得到

\[y^{n}\times \sum_{T\subseteq E_1}(-p-1)^{|T|}g(T) \]

好像能做了?我们先想想 \(g(T)\) 到底是个什么玩意:钦定 \(T\) 中的边在 \(E_2\) 中也出现。

我草,这他妈是 \(n-|T|\) 个连通块而不是 \(|T|\) 个连通块啊,所以想办法把前面一坨的指数变成 \(n-|T|\) 啊,不然你不能把多出来的部分塞进组合意义啊。

\(k=-(p+1)\),显然 \(k^{|T|}=k^{n-(n-|T|)}\),所以把 \(k^n\) 联通那个图联通方案数原本要提出来的 \(n^{-2}\) 放外面和 \(y^n\) 待在一块哦,然后图联通方案数就变成了 \(\prod_{i=1}^{n-|T|}a_i\times n\times k^{-1}\)

这个时候终于能上组合意义了,泪目。

时间复杂度 \(O(n)\),我草,厉害的。

Task3

这个第二问把人搞得筋疲力尽了,怎么还可以有第三问的?一棵树都这么繁琐了...

我们冷静一下思考怎么做到一棵树如此繁琐,对所有树求和竟然还能做的啊。

发现一个事情啊,就是连通块的划分变得相当自由啊,这个肯定是变好了,你在树上划分连通块显然限制贼多,这里你随便钦定什么是联通都行。

还记得最上面的 \(f,g\) 吧,意义依旧不变啊,所以 \(f,g\) 的反演关系还是不变,但是 \(g\) 肯定是变了。推个式子先。

理解了过程就会发现上面除了最后一步其实也没用到是个树的条件啊,所以你发现一直是不变的,可以直接原样得到:

\[y^{n}\times \sum_{T\subseteq E_1}(-p-1)^{|T|}g(T) \]

把指数变成 \(n-|p|\) 还是逃不掉,但是思考里面的图联通方案数好像变了,因为两颗树都不确定了,所以是 \(n^{n-|T|-2}\times \prod_{i=1}^{n-|T|}a_i\) 这玩意的平方...

所以首先最外面提出去的从 \(n^{-2}\) 变成了 \(n^{-4}\),你往每个连通块组合意义嗯塞的系数也从 \(n\times p^{-1}\) 变成了 \(n^2\times p^{-1}\)

冷静一下,接下来怎么搞啊,你知道了一个连通块的贡献了,最后搞出来的一定是个森林。

我草,Exp 组合意义......

具体一点,一个连通块,设大小为 \(x\),则形态 \(x^{x-2}\) 种,每次贡献都是 \(x^2\times n^2\times p^{-1}\)

这玩意的系数写成 EGF 以后 Exp 一下,第 \(n\) 项系数就是你最后求和的东西了......

时间复杂度 \(O(n\log n)\)

我去,是真的牛掰。

记录

结语

组合意义天地灭,代数推导保平安。

posted on 2022-10-16 18:33  Cry_For_theMoon  阅读(352)  评论(2编辑  收藏  举报