Combinatorial Proof

概要:这个 PPT 不太涉及 poly 技巧。
建议:不要相信 PPT 内容,可能是在乱写。
CF1264D 两个version
原题面并不绕。
CF1264D 两个version
对于一个点算贡献。相当于 +1/-1
设左边左括号数,右边右括号数,左边 ? 数,右边 ? 数。
记作 \(l,r,x,y\)。
可以通过D1。
分成两段的贡献。
前面的直接范德蒙德卷积。 提出 \(l\)
P4859
给出 \(n\) 个数 \(a_i\),以及 \(n\) 个数 \(b_i\),要求两两配对使得 \(a>b\) 的对数减去 \(a<b\) 的对数等于 \(k\) 。
\(n,k \leq 2000\) ,保证 \(a,b\) 无相同元素。
P4859
先把恰好转化为钦定。
然后直接dp。
设 \(dp_{i,j}\) 表示 前 \(i\) 个数,有 \(j\) 个 \(a_i > b_i\)
对 \(a_i\) 从小到大排序。
没了。
P4921 [MtOI2018]情侣?给我烧了!
共 \(T (T \leq 1000)\) 次询问,每次给出一个正整数 \(n (n \leq 1000)\) ,表示有 \(n\) 对情侣和 \(n\) 排座位(每排有两个位置),对于 \(k\in[0,n]\),求出恰好有 \(k\) 7对情侣坐在同一排的方案数。
P4921 [MtOI2018]情侣?给我烧了!
恰好 !!!
考虑二项式反演。
不妨设 \(G(k)\) 为钦定有 \(k\) 对情侣是和睦的答案,\(F(k)\) 是恰好。
施以二项式反演。
终于能够通过弱化版了。
第二类斯特林数
\(n\) 个有区别的元素投入 \(m\) 个无区别盒子,无空盒的方案数。
CF932E
求
改写前一步的上标。
end。
P2791
求
上界是 \(O(L)\)。
使用第二类斯特林数行即可。
求第二类斯特林数如何求呢,注意到上面的式子:
至此,我们可以实现以\(O(n\log n)\) 的时间复杂度求出\(S(n)\)这一行的第二类斯特林数。
P4091
题面简要,不做阐释。
令 \(\sum_{i=0}^n k^i = C_k = \frac{k^{n+1}-1}{k-1}\)
令 \(G_i = \frac{C_i}{i! },H_i=\frac{(-1)^{i}}{(i)!}\)
是卷积形式。
P10982&&P6596
这个就不需要阐述题面了把。
P10982&&P6596
有向有标号有向图数量:\(2^{n \choose 2}\)。后面叫做 \(g(n)\)
证明:显然。
有向有标号连通图数量:设答案叫做 \(f(n)\)
考虑容斥,枚举点 \(1\) 所在的连通块大小。
就是 \(f(n)=g(n)-\sum\limits_{i=1}^{n-1} {{n-1} \choose {i-1}} f(i) g(n-i)\)。复杂度 \(O(n^2)\) 。
一个结论:一个 \(n\) 个点 \(m\) 条边的带标号无向图有 \(k\) 个连通块。我们希望添加 \(k-1\) 条边使得整个图连通,求方案数。
答案是 \(n^{k-2} \prod s_{i}\), 其中 \(s_i\) 是每个连通块的数量。
证明见OI-wiki。
意思就是说:我们只是关心后面的那一坨。考虑 dp,设 \(H_{i,j}\) 表示有 \(i\) 个点,\(j\) 条割边,后面的东西的乘积。还是要考虑枚举连通块 \(H_{i,j}=\sum\limits_{k=1}^{i-1} H_{i-k,j-1} \times H_{k,0} \times {i \choose k}\)。 注意下这里因为我们没有钦定边双的顺序,最后的时候要除以一个\((j+1)!\)。
那我们的边界条件怎们做啊!!
实际上很简单,只需要用 \(g(n)\) 减去其他的就行了。
此时 \(H_{i,0}= \texttt{边双连通图} \times i\)
P11363
题面大家应该都看过(
考虑 \(k=1\) 怎么做,\(\prod_{i=1}^n (deg_i-1) !\)
考虑 \(k=2\) 怎么做,把两个关键边的链找到,这些的贡献(端点是不算的)只有 \((deg_i-2) !\)。
然后我们有个指数容斥
令 \(c_i = (deg_i-1)^{-1}\)
系数的 \(+1\) 先不管,最后在乘上去。
前面的贡献无关,最后乘上去。
然后呢,我们发现,如果关键点连起来不是链,那们就不行了。
所以考虑算所有的链。
对于一条边 \((x,y)\),考虑一下贡献,设 \(f_x\) 表示子树内至少钦定的一条边,\((x,y)\) 的贡献和。
假设这条边是关键边:
只会选 \((x,y)\),端点不算,贡献为 \(-1\)。
只会选 \(y\) 下的子树,端点不算,贡献为 \(c_x f_y\)。
两个都要 \(-c_x f_y\)。
综上总的贡献是 \(-1\)。
假设不是关键边:
只会选 \(y\) 下的子树,端点不算,贡献为 \(c_xf_y\)。
考虑枚举 \(\text{LCA}=x\)。
第一种情况:\((x,y)\)
钦定选:\(-1 \times f_y\)。
不选 \(-1\),除去两个端点内没有。
第二种情况:\(y \to x \to z\)
类似上面的情况。前缀和优化。
P4769
转化题意:\(\sum\limits_{i=1}^n|i-p_i|=2 \times \texttt{逆序对数}\)
套路的,建图,从 \(i\) 点向 \(n+p_i\) 连边,观察一下,如果图上的两个逆序对还有别的交点,就无解了。
当然可以从提示中直接得到。
问题等价于不存在 \(\forall i,j,k (i<j<k),p_i > p_j >p_k\)
不妨考虑dp,设 \(dp_{i,j}\),表示前 \(i\)个数中,最大值为 \(j\)
实际上面是格路计数经典优化。
不难发现 \(dp_{i,j} =dp_{i-1,j} + dp_{i,j-1}\) 就是格路计数,但是 \(j\leq i\)。不要告诉我你不知道这个是什么
等价于 \(dp_{i,j}= {i+j \choose j}- {i+j \choose j-1}\)
不妨令 \(dp_{i,j}\) 表示从 \((i,j)\) 走到 \((n,n)\) 的方案数。
考虑:增加了限制如何解决。
考虑到第 \(i\) 位,之前的满足恰好相等,钦定这一位是 \(>p_i\)。
不妨令此时最小能填的数为 \(now\),前面最大的数为 \(mx\)。
第一种情况实际上是 \(now < p_i\) 且 \(p_i \leq mx\) 直接无解。
否则就是 答案就是 \(dp_{i,\max(p_i,now)+1}\)。
不为人知的神秘题目
求集合 \(S=\{1,2,\dotsb 5n\}\) 中有多少个子集和为 \(5\) 的倍数。
不为人知的神秘题目
考虑 GF,\(F(x)=\prod_{i=1}^{5n}(1+x^i)\)
假设和为 \(2\) 的倍数怎么做?直接带入 \(1\) 和 \(-1\)。
假设和为 \(5\) 的倍数怎么做?
考虑单位根 \(\omega_5\)
对于 \((\omega_5^0)^s+(\omega_5^1)^s+(\omega_5^2)^s+(\omega_5^3)^s+(\omega_5^4)^s\)
显然当 \(s|5\) 为 \(5\),其他时候为 \(0\),等比数列求和\(=(\omega_5^0) \frac{1-w_{5}^{5s}}{1-w^s} =0\)
直接加起来,答案就是 \(\frac{F(\omega_5^0)+F(\omega_5^1)+F(\omega_5^2)+F(\omega_5^3)+F(\omega_5^4)}{5}\)
显然 \(F(\omega_5^1)= [(1+\omega_5^1)(1+\omega_5^2)(1+\omega_5^3)(1+\omega_5^4)(1+\omega_5^5)]^n\)
考虑因式分解 \(x^5-1=(x-\omega_5^0)(x-\omega_5^1)(x-\omega_5^2)(x-\omega_5^3)(x-\omega_5^4)\)
此时带入 \(x=-1\)。容易知道 \(F(\omega_5^1) =2^n\)
答案即为 \(\frac{2^{5n}+4\times 2^{n}}{5}\)
一些小思考
Bouns \(1\): 对于 \(m\) 的倍数怎么做。
Ans \(1\):P10084
Bouns \(2\):为什么(单位根反演)。
两个问题并不难。
「WC2019」数树
其实简要题意在题目描述里。
op=0
考虑点边容斥,发现答案显然是 \(y^{(n-{|E_1 \cap E_2|})}\)
随便做即可。
op=1
好像不太简单了哦。
然后怎么办啊,完全不会啊。 
考虑容斥哦,\(f(S)=\sum\limits_{T \subseteq S} \sum\limits_{P \subseteq T}(-1)^{|T|-|P|} f(P)\),不妨令 \(f(S)=y^{n-|S|}\),\(S={E_1 \cap E_2}\)。\(g(T)\) 表示包含 \(T\) 的树的个数。
op=1
那么 \(T\) 肯定是由多个连通块拼接而成,我们上面是不是讲过一个结论?假设有 \(k =n-|T|\) 个连通块,\(a_i\) 表示联通块大小。
op=1
我们算出每个联通的贡献了!!!。可以直接树上背包做 \(O(n^2)\)。但是时间复杂度不对啊,那怎么办呢?发现实际上你的 \(dp\) 状态只需考虑在什么时候断开联通块就行了,设 \(dp_{u,0/1}\) 表示这个时候这个点有没有加入这个联通块。转移比较简单。
op=2
op=2
我们不妨交换求和顺序考虑每个联通块的贡献。
一个大小为 \(a\) 的联通块。贡献 \(\frac{n^2 y}{1-y} a^2\)
对于大小为 \(a\) 的联通块能构成 \(a^{a-2}\) 个生成树。贡献\(\frac{n^2 y}{1-y} a^a\)
所以相当于 \(n\) 个有标号小球扔进 \(k\) 个无标号盒子,不允许空盒子。
令一个连通块的 EGF \(F(x) =\sum\limits_{i=1} \frac{n^2 y}{1-y}i^i \frac{x^i}{i!}\)
根据 Exp 的组合意义,令答案为 \([x^n]\exp(G)\),其中 \(G=e^{F}\)
P6624
给定一个 \(n\) 个顶点 \(m\) 条边(点和边都从 \(1\) 开始编号)的无向图 \(G\),保证图中无重边和无自环。每一条边有一个正整数边权 \(w_i\),对于一棵 \(G\) 的生成树 \(T\),定义 \(T\) 的价值为:\(T\) 所包含的边的边权的最大公约数乘以边权之和,即:
求出对于所有 \(T\) 的之和。
其中 \(e_1,e_2,\dots,e_{n-1}\) 为 \(T\) 包含的边的编号。
\(1\leq n\leq 30, 1\leq m \leq \frac {n(n-1)}{2}, 1\leq w_i \leq 152501\)。
首先对于 \(\gcd\),我们知道
\(\mu * id =\varphi\)
\(\mu * 1 = \epsilon\)
\(\varphi * 1 =id\)
可以莫比乌斯反演或者欧拉反演,不难得到
前面直接枚举就行了,考虑一下后面怎么做吧。考虑 Matrix Tree,Matrix Tree 的板子不是只能做 \(\sum\limits_{T} \prod\limits_{i=1}^n w_{e_i}\)。
一种最裸的做法:枚举一条边然后求包含这条边的生成树个数。(之前题单有)。
充分发扬人类智慧,我们往行列式里面塞入多项式!不难发现每一条边的的贡献显然是 \(w_ix+1\),这样我们就把乘法运算变成了加法运算。答案就是一次项系数。
但是现在要考虑的是多项式操作。加减是显然的。
乘法直接展开即可。
除法就是 \(\frac{ax+b}{cx+d}\),尝试一下找到逆元。
\((ax+b)(cx+d) = 1 \pmod x^2\),不难得到解。
所以不难得到 \(\frac{ax+b}{cx+d} = \frac{a}{c}+\frac{bc-ad}{c^2}x\) 只对可选边数大于等于 \(n−1\) 的 d 求行列式即可。可以通过。
矩阵树定理:度数矩阵-邻接矩阵,随便删掉一行一列的行列式的值,其实不太对,具体可以看模板。
行列式求值:你看代码和结论就懂了。
P8340
求有多少个值域 \([1,n]\) 的集合,做 01 背包后可以凑出 \([1,n]\) 内所有数。
\(n \leq 5 \times 10^5\)
P8340
直接考虑 \(O(n^2)\) 的一个dp,设 \(dp_{i,j}\),表示前 \(i\) 个数字,前缀最多是从 \([1,j]\) 这个选出来的前缀的方案数。
dp 状态有 \(2\) 维,考虑优化。
刻画:对于 \(\forall k\in [1,n],\leq k\) 的数之和一定要 \(\geq k\)
必要性:显然。
充分性:显然,考虑回顾上面的 dp 过程试试看?
正难则反,考虑找到一个最小的 \(k\),所有的和 \(< k\)
这也就意味着,对于 \(k-1\),和一定为 \(k-1\)。
继续考虑 dp,设 \(f_{i}\) 表示 \(\leq i\) 的元素之和为 \(i\),且对于任意 \(x \leq i\) 都合法。
不难发现答案就是 \(2^n - \sum\limits_{i=1}^{n-1} f_i 2^{n-i-1}\)
不妨令拆分数为 \(g\),不合法的直接从拆分数中直接减去。求拆分数是一个经典问题,不难做到 \(n \sqrt{n}\)。(Hint:画 Ferrers 图)
具体一点,就是 \(f_i = g_i -\sum\limits_{j<i} val(j,i-j)\)
其中 \(val(x,y)\) 表示用 \(\geq x+2\) 的数凑出和为 \(y\) 的方案数。
考虑具体的对 dp 的转移。由定义容易知道,对于 \(f_j\),一定有 \(j+1\) 不能被表示出,故如果能转移,\(j+j+2 \leq i\),类似半在线卷积,对于 \(1\to n\) 转移到 \(n+1 \to 2n\)。求出 \(val(x,y)\) 的方法和拆分数差不多。

浙公网安备 33010602011771号