杂项计数理论
Catalan 数 / 对称映射
首先我们有一类问题的转移形如:
等价于
即为从 \((0,0)\) 出发,每次向右或向上走到 \((n,n)\) 的方案数 \(C_{2n}^n\)。
若再增添限制:\(\forall{i>j},f_{i,j}=0\),则方案数为 \(Cat_n=\dfrac{C_{2n}^n}{n+1}\)。
考虑证明,这相当于不触碰直线 \(y=x-1\),那么我们利用容斥,求不合法方案数:
对于触碰直线 \(y=x-1\) 的路径,将第一次触碰前的部分关于 \(y=x-1\) 翻折。
则:上述路径与 \((1,-1)\) 即 \((0,0)\) 关于该直线的对称点,到 \((n,n)\) 的路径一一对应(后者显然都一定触碰 \(y=x-1\))从而易证。
考虑把这个问题拓展到 \((0,0)\) 走到 \((n,m)\)。同理可得答案为:
其中 \(n+m=n-1+m+1\)。
这种思想称为 对称映射,甚至可以多次对称,进一步拓展到有多条限制直线而不仅局限于 \(y=x+1\)。
P3266 [JLOI2015]骗我呢
即要求不得经过 \(A:y=x+1\) 及 \(B:y=x-(m+2)\) 两条直线,到达目标的方案数。
同理考虑容斥,则若从 \((x,y)\) 出发,第一次经过 \(A\),那么通过寻找对称点 \((x',y')\) 到达目标的路径数目即为贡献,直接把这部分作为不合法的减去。
但是这里的路径经过 \(A\) 已经考虑,还需考虑不能经过 \(B\),可以发现这是一个子问题,再次对称即可。
也就是说,设一条路径交替经过 \(A,B\) 形成 \(ABAB\cdots\) 或 \(BABA\cdots\) 的长为 \(k\) 的序列,那么在对称 \(k\) 次之后的位置,算出其走到目标的那些路径,恰好就是所有这样为结尾的路径的数目。
但是这样会出现重复计算,也就是说我们对称后不能保证对称过来的那部分路径是否经过了对面那条线段。
可以发现对于 \(A,B\) 对称形成的两部分路径,恰好是 \(AB\) 结尾和 \(BA\) 结尾的被多算了,加回来即可。
综上所述,以 \((-1)^k\) 作为符号,求所有 \(k\in[1,n]\) 次对称后路径数目的代数和,就得到不合法路径数,最后用所有路径数减去即可。
因此只要对第一次经过哪条直线讨论,分别一直做 \(n\) 次即可 \(O(n)\) 解决原问题。
所以有 \(k\) 条直线的话,似乎也可做到 \(O(nk)\)。
LGV 引理
行列式求值
- 模数为质数
根据行列式的定义式易知:
- 任意交换两行 / 列,行列式值取反。
- 对于一行 / 列乘上任意常数后加到其他行上,行列式值不变。
- 对于简化阶梯型矩阵,其值即为对角线元素乘积。
我们发现 1, 2 实际上意味着我们可以把矩阵 高斯消元 为 3 的情形,只需在交换行时标记符号的改变。
- 模数非质数 / 精度误差过大
在浮点行列式求值中,后者出现的次数比想象中多许多。
所以我们在不改变复杂度(可用势能分析证明)的基础上,用两行做辗转相除法代替其中一行乘上另一行的逆元。
路径计数
定义有向无环图上 \(A_1,A_2,\cdots,A_n\) 到 \(B_1,B_2,\cdots,B_n\) 的不相交路径组,是一组路径 \(A_1\to B_1, A_2\to B_2, \cdots, A_n\to B_n\) 使得路径两两不相交。
设对于边 \(i\),其权值为 \(\omega(i)\),且:
\(\displaystyle e(A_1,B_1)=\sum_{S:A_1\to B_1}\prod\limits_{i=1}^n \omega(S_i)\)
即所有 \(A_1\to B_1\) 的路径的 \(\omega\) 积之和。
则断言:
容易发现设 \(\omega(i)=1\), \(\det(M)\) 即为有向无环图上,\(A_1,A_2,\cdots,A_n\) 到 \(B_1,B_2,\cdots,B_n\) 的不相交路径组数。
而 \(M\) 则可以直接用邻接矩阵结合类似 Floyd 的矩阵乘法求出。
有环时引理不成立。
upd:这个 \((-1)^{t(\sigma(S))}\) 其实对 LGV 引理的适用范围做了很大的限制。一般来说,只有 钦定 \(p=1,2,\cdots,n\) 的情况下才方便统计。相当于削了 LGV 支持多对多目标改变的功能()
矩阵树定理
考虑 无自环 的任意无向图(有向图),求其 不同生成树的数目(对于有向图,改为求 钦定根后内向树 / 外向树的数目)。
下面只考虑有向图,因为无向图可以任意选一个根然后当有环有向图跑出内向树 / 外向树的数目,就相当于原图的生成树数目。
定理:
设图的邻接矩阵为 \(A\),另设图的 度数矩阵
其中如果要求外向树,则 \(deg_i\) 表示 \(i\) 的入度;如果要求内向树,则 \(deg_i\) 表示 \(i\) 的出度。
则树的 Kirchhoff 矩阵 即为 \(M=D-V\)。在 \(M\) 上 删除第 \(k\) 行和第 \(k\) 列 得到矩阵 \(M_k\),则原图以 \(k\) 为根的内向树(外向树)个数即为
对于无向图,\(k\) 任取 \(1,2,\cdots,n\) 得到的答案均相同。
带权扩展
设一棵生成树的权值为其中所有边的 权值之积,求给定图的所有生成树权值和。
关键观察:一条边权值为 \(k\) 等价于这条边是 \(k\) 重边。也就是 \((u,v)\) 间的重边会在整个方案数上乘上重数。
所以直接将权值当重边考虑,邻接矩阵上存储这条边的重数,度数矩阵需要将重边多次统计度数。

浙公网安备 33010602011771号