qwq的博客

博客

tutorial

2022-02-08 11:22:39 By qwq

A

原本两维息息相关,相当麻烦,容易想到转45度坐标,可以使得两维独立。

那么原本xnym会变成(x+y2)n(xy2)m

可以用二项式展开真正使得两维独立,接下来需要解决的是求E(ak)

可以简单设一个dp。

Fi,j表示i步后E(aj)是多少,同样用二项式展开可以得到转移式。

把转移写成矩阵,可以使用矩阵乘法。

复杂度O((n+m)3 log t)

计算Fi,j的过程可以不用矩阵乘法。

注意到转移过程中j减少的次数不超过n次,那么记gi,j表示经过i次减少量至少为1的转移,总的变化是j的所有转移的系数乘积和。

对于减少量为0的转移,Fi,j会对Fi+1,j产生2Fi,j的贡献。

所以,最终的和就是\sum \limits_{i=0}^n\binom t i \times \sum\limits_{j=0}^n g_{i,j}\times x^j\times 2^{t-i}

复杂度O((n+m)^3)

B

不妨让我们先换一种方式描述积和式。

一个边权二分图,一个完美匹配的贡献为匹配边边权的乘积。

求所有完美匹配贡献的和。

接下来我们认为矩阵上不为1的位置对应的就是一条关键边。

假设S是一个关键边集,任意两条属于边集的边没有相同的端点。

f(S)表示有多少种完美匹配方案恰好只包含边集S,也就是不包含多余的关建边。

g(S)表示有多少种完美匹配方案包含边集S,显然g(S)=(n-|S|)!

定义v(S)表示边集S内所有边边权的乘积。w_e来表示边e的权值。

首先显然g(S)=\sum_{S\subset T}f(T)

则显然有f(S)=\sum_{S\subset T}g(T)*(-1)^{|T|-|S|}

我们再来写出答案的式子。

\sum_{S}v(S)*f(S)

\sum_{S}v(S)\sum_{S\subset T}g(T)*(-1)^{|T|-|S|}

\sum_{T}g(T)\sum_{S\subset T}v(S)*(-1)^{|T|-|S|}

整理一下式子可以发现答案的表达。

\sum_{S}(n-|S|)!\prod_{e\in S}(w_e-1)

因此我们可以把所有边权减一,那么问题变成计算对于每个k,任选k条不相交的关键边边权乘积和是多少。

首先显然可以将联通块分开独立来做,最后再背包在一起。

假设一个联通块点数为n,边数为m,因为是二分图,其中一边一定有不超过\frac{n}{2}个点。

可以将小的一边状压,假设小的一边是Y部。

f_{i,s}表示做到X部的第i个点,目前对于一端在X部的前i个点的关键边,我们选择了一些,它们没有相同的另一端并覆盖了s这个状态,边权积的和是多少。

转移只需要枚举当前点的一条边即可。

复杂度为O(m*2^{\frac{n}{2}}),即O(n^2*2^{\frac{n}{2}})

考虑对图做出任意一颗生成树。

对于非树边,我们暴力枚举其选或不选。

对于生成树的部分,我们设dp_{x,i,0/1}表示x子树内已经做完,一共选了i条关键边,目前x的匹配状态是什么。

合并时需要枚举两个子树的第二维,枚举上界显然不会超过子树的大小。

如果这样枚举,复杂度实际只有n^2,可以发现任意两个点都会在lca处被计算一次。

那么我们的复杂度为O(n^2*2^{m-n+1})

对于每个联通块,我们只需要选择复杂度小的算法即可。

最终复杂度为O(n^2*2^{\frac{m}{3}})

C

首先AB两维顺序没有关系,我们默认A\geq B

我们来尝试写出一个式子。首先肯定开始飞了之后就不会正常驾驶,容易想到枚举起飞位置。接下来是简单的鸽笼原理。

\sum_{a=0}^A\sum_{b=0}^B\binom{a+b}{a}\sum_{x=1}^{min(A-a,B-b,C)}\binom{A-a-1}{x-1}\binom{B-b-1}{x-1}\binom{C-1}{x-1}


\sum_{i=0}^n\binom{a}{i}\binom{b}{n-i}=\binom{a+b}{n}

从组合意义去理解,有a+b个格子,要求给n个格子染上黑色,求方案数。两个式子都能表达。


\sum_{i=0}^n\binom{i}{a}\binom{n-i}{b}=\binom{n+1}{a+b+1}

从组合意义去理解,有n个格子,要求给a个格子染上红色,给b个格子染上绿色,最后一个红色格子严格在最前一个绿色格子之前,同时还要选择一条分界线i,使得前i个格子只有红格子,后面只有绿格子。


不妨额外添加一个格子,同样要求给a个格子染红,b个格子染绿,还需要给一个格子染黄,规定一个格子只能染一种颜色。

要求黄格子前只有红格子,黄格子后只有绿格子。显然每一种新问题的染色方案对应原问题一种方案。

根据我们得出的答案的表达式,不妨先将A,B,C都减一,接下来设up表示min(A,B,C)

为了方便对比,先贴出答案表达式。

\sum_{a=0}^A\sum_{b=0}^B\binom{a+b}{a}\sum_{x=1}^{min(A-a,B-b,C)}\binom{A-a-1}{x-1}\binom{B-b-1}{x-1}\binom{C-1}{x-1}

接下来用x代替原来的x-1a代替原来的A-ab代替原来的B-b,同时我们已将A,B,C减一。

\sum_{x=0}^{up}\binom{C}{x}\sum_{a=0}^A\binom{a}{x}\sum_{b=0}^B\binom{b}{x}\binom{A+B-a-b}{A-a}

\sum_{x=0}^{up}\binom{C}{x}\sum_{a=0}^A\binom{a}{x}\sum_{b=0}^B\binom{b}{x}\binom{A+B-a-b}{A-a}

注意到b>B会让\binom{A+B-a-b}{A-a}值为0,因此我们可以抬高上界。

\sum_{x=0}^{up}\binom{C}{x}\sum_{a=0}^A\binom{a}{x}\sum_{b=0}^{A+B-a}\binom{b}{x}\binom{A+B-a-b}{A-a}

\sum_{x=0}^{up}\binom{C}{x}\sum_{a=0}^A\binom{a}{x}\binom{A+B-a+1}{A-a+x+1}

使用之前基础知识提到的可以变换成这条式子。

\sum_{x=0}^{up}\binom{C}{x}\sum_{a=0}^A\binom{a}{x}\binom{A+B-a+1}{A-a+x+1}

\sum_{x=0}^{up}\binom{C}{x}(\sum_{a=0}^{A+B+1}\binom{a}{x}\binom{A+B-a+1}{A-a+x+1}-\sum_{a=A+1}^{A+B+1}\binom{a}{x}\binom{A+B-a+1}{A-a+x+1})

\sum_{x=0}^{up}\binom{C}{x}(\sum_{a=0}^{A+B+1}\binom{a}{x}\binom{A+B-a+1}{B-x}-\sum_{a=A+1}^{A+B+1}\binom{a}{x}\binom{A+B-a+1}{A-a+x+1})

前面部分可以使用基础知识提到的等式,后面部分我们改枚举a-(A+1)

\sum_{x=0}^{up}\binom{C}{x}(\binom{A+B+2}{B+1}-\sum_{a=0}^{B}\binom{a+A+1}{x}\binom{B-a}{x-a})

容易发现up,B\leq 10^6,因此前面部分已经可以快速计算,接下来我们只考虑后面部分。

\sum_{x=0}^{up}\binom{C}{x}\sum_{a=0}^{B}\binom{a+A+1}{x}\binom{B-a}{x-a}

我们用基础知识介绍的等式拆开组合数。

\sum_{x=0}^{up}\binom{C}{x}\sum_{a=0}^{B}\binom{B-a}{x-a}\sum_{i=0}^x\binom{A+1}{i}\binom{a}{x-i}

\sum_{x=0}^{up}\binom{C}{x}\sum_{i=0}^x\binom{A+1}{i}\sum_{a=0}^{B}\binom{B-a}{x-a}\binom{a}{x-i}

\sum_{x=0}^{up}\binom{C}{x}\sum_{i=0}^x\binom{A+1}{i}\sum_{a=0}^{B}\binom{B-a}{B-x}\binom{a}{x-i}

\sum_{x=0}^{up}\binom{C}{x}\sum_{i=0}^x\binom{A+1}{i}\binom{B+1}{B-i+1}

\sum_{i=0}^{up}\binom{A+1}{i}\binom{B+1}{B-i+1}\sum_{x=i}^{up}\binom{C}{x}

后面部分可以预处理后缀和,那么这个式子也可以快速计算。

Comments

No comments yet.

Post a comment

You can use @mike to mention the user mike.

If you wish to input the '@' character, please use @@