打卡

今天是 5 月 3 日,从今天开始每天打个卡,大概是晚上 8 点到 10 点之间更新,记录一天所学。

5 月 3 日

1、min-max 容斥

容斥应用在 min max 之间,有

$$\max S = \sum_{T \subset S} (-1) ^ {|T| - 1} \min T$$

$$\min S = \sum_{T \subset S} (-1) ^ {|T| - 1} \max T$$

至于证明,我考虑第 $k$ 大作为最小时被算的次数,为

$$\sum_{i = 1} ^ {k} \binom{k - 1}{i - 1} (-1) ^ {i - 1} = [k = 1]$$

【BZOJ 4036】每次生成数 $[0, 2 ^ n)(n \le 20)$ ,生成 $i$ 的概率为 $p_i$ ,问期望多少次后或和为 $2 ^ n - 1$ 。

取得所有,可以看出取得的时间的 max 。某个集合的 min 可以看做选到集合中某个的期望次数,可以转化为1除取得集合中某个的概率。

$$E(\max S) = \sum_{T \subset S} (-1) ^ {|T| - 1} \frac{1}{\sum_{i \cup T \ne \emptyset} p_i}$$

所以大概先处理好 $f_T = \sum_{i \cup T \ne \emptyset} p_i$ ,然后带上容斥系数直接求和。$f_T$ 可以考虑先用减法原理,考虑交集为空,然后对 $T$ 取补集,考虑子集和即可。

扫描二维码关注公众号,回复: 105811 查看本文章

【经典问题】$n$ 种邮票,每次等概率随机,期望多少次能取得所有的 $n$ 种。这道题通过算两次,可以导出一个有趣的恒等式:

$$\sum_{i = 1} ^ n \frac{1}{i} = \sum_{i = 1} ^ n (-1) ^ {i - 1} \binom{n}{i} \frac{1}{i}$$

我还没有想到其他很好的组合证明,yay 给了差分相等,f(0) 相等的代数证明。大概有一些什么推广之类的。

【HDU】Endless Spinning:长度为 $n$ 的序列,每次将一个区间染成黑色,期望多少次全部黑?对于要求子集 $S$ 中的某一个位置变黑的期望操作次数,考虑子集变黑的概率,考虑子集不变黑的概率,为 $\sum \binom{b_i}{2}$ ,所以式子为

$$\sum_{S \subset [n]} (-1) ^ {|S| - 1} \frac{1}{1 - \frac{\sum \binom{b_i}{2}}{\binom{n}{2}}}$$

用一个 DP 来进行描述,我设计的状态为当前最后将第 i 个位置染黑,$\sum \binom{b_i}{2} = j$ 时的所有情况的 $(-1) ^ {|S| - 1}$ 的和。 

我稍微思考了一下,觉得 min max 容斥大概可以推广到形如 kthmax 这样的形式。

$$\text{kthmax}(S) = \sum_{T \subset S} f(|T|) \min(T)$$

考虑第 $x+1$ 大的元素被计算的次数,有

$$\sum_{i = 0} ^ x \binom{x}{i} f(i+1) = [x = k - 1]$$

二项式反演得

$$f(x+1) = (-1) ^ {x - k + 1} \binom{x}{k - 1}$$

$$f(x) = (-1) ^ {x - k} \binom{x - 1}{k - 1}$$

所以

$$\text{kthmax}(S) = \sum_{T \subset S} (-1) ^ {|T| - k} \binom{|T| - 1}{k - 1} \min (T)$$

根据这个原理,我可以设计下面这道题目。

【原创题】$n, m \le 1000, n - 10 \le K \le n$ ,有 $n$ 张邮票,拿到第 $i$ 张的概率为 $\frac{p_i}{m}$ ,问期望多少次,才能拿到 $K$ 张邮票,答案对 $998244353$ 取模。

套用 kthmax ,再利用期望的线性性质展开,之后就相当于问一个子集被选择的期望次数,变为概率分之一,式子很容易写出来,然后可以设计一个 $O(n m K)$ 的 DP ,为了转移,方程的其中一维与组合数的下指标有关。

2、某个区间的线性基

区间 $[l, r]$ 的线性基可以 $O(bit)$ 快速处理。若 $l+2 \le r$ ,那么一定可以找到 $l \le x \le x+1 \le r$ ,且 $x$ 为偶数,所以最低位就任意了,只需要对高位进行递归。若 $l+1 = r$ ,那么直接把两个数字插进去。若 $l = r$ ,就把这一个数字插进去。

给定两个序列 $l[], r[]$ ,$l_i \le r_i$ ,现在问区间的区间的线性基。。。想来想去发现仍然只能套个线段树,做到三个 log 的复杂度,没想到怎么继续优化,但可以有一些常数优化。

3、「2017 Multi-University Training Contest 1」给定一棵 $100000$ 个点的树,对所有路径上的不同色数求和。

考虑每种颜色的贡献,算经过这种颜色的路径数量,转化为算不经过这种颜色的路径数量。考虑枚举每个点,然后枚举它的后继,后继不断的进行搜索,不经过与最初枚举的点颜色相同的点,总共扫描到 $x$ 个点,贡献 $\binom{x}{2}$ ,再特殊考虑这种颜色的所有点的 LCA 外的点。可以把所有的颜色一次做,直接对这棵树进行一个 DFS ,sum[x] 表示 DFS 到当前位置时,去除掉颜色为 x 的所有 DFS 完的子树之后,总共去除掉了多少个点,只需要用这些数据来统计答案,并维护这些数据。个人觉得这道题还是蛮巧妙的。

5 月 4 日

发烧。

5 月 5 日

发烧。

5 月 6 日

半天用来发烧,半天用来学点东西。

1、2-SAT 相关

2-SAT 的建图要充分必要,可以利用传递性。

2-SAT 判断是否有解,要根据两个点是否在同一个强连通分量。2-SAT 构造解,直接取两个强连通分量中较小的,可以根据 DFS 序的一些性质以及对称性进行证明。

「BZOJ 3495」Riddle :给定一张 100000 个点,200000 条边的图,点被划分为若干个点集,要求每个点集中选择一个点,任意一条边至少有一个端点被选择,问是否有解。考虑 2-SAT ,每个点包括了选或不选这两种可能。对于每个点集中选择一个点这个限制,考虑将 i1 连向所有的 j2 ,构建 2n 个前缀、后缀辅助点,把边数优化到线性。

一般而言,就是这样一个模型:某个集合中选择有且仅有一个点,于是可以用上面的模型进行优化。有时候还可以用线段树,Trie 什么的来优化建图,总之都是些很显然的东西吧。

2-SAT 有一类在树上的套路,「Mythlogical - 改」:给定一棵 1000 个点的树,有 1000 个礼物,每个礼物在某个点,且满足若干个礼物 x 和礼物 y 的路径经过点 c 的限制,或者礼物 x 和礼物 y 的 LCA 为点 c ,请构造一组方案。

设 Vi, j 表示礼物 i 是否在 j 子树中。先满足树上的限制,若在当前子树内,那么就在父亲的子树内,也不在兄弟的子树内,这样的条件是充分必要的,对于不在兄弟子树内的连边,考虑利用先前的技巧。然后礼物 x 和礼物 y 的路径经过点 c ,相当于礼物 x 和礼物 y 在点 c 的不同子树,所以若 x 到点 c 的后继 v 子树内,点 y 就不在,若点 x 不在以 c 为根的子树内,点 y 就在。礼物 x 和礼物 y 的 LCA 为点 c ,则要求点 x 和点 y 都在以 c 为根的子树内,若 x 到点 c 的后继 v 子树内,点 y 就不在。

2、偏序建图

「GDOI 2018 Day 3 Prob 1」给定三维,若 i 有两维大于 j ,那么可以利用 i 消除 j ,问有多少个点可能被保留到最后。

若 i 可以消除 j ,那么 i, j 连边,问题变为有哪些点可以作为某个树形子图的根节点。两两可比,会连成一个竞赛图,竞赛图缩点后是一条链,有且仅有第一个强连通分量内的点可以作为树形子图的根。枚举两维,用可持久化线段树来优化一下连边,跑跑 Tarjan ,取最后一个有 1 到 n 间的点的强连通分量。

总之二维偏序的建图可以用可持久化线段树进行辅助,每次连向前缀对应的若干个线段树节点,然后把当前节点的信息也加到可持久化线段树里面去。推广到三维偏序,考虑对其中的一维进行 CDQ 分治,剩下的两维照做就是了。

竞赛图相关的另外一个问题就是竞赛图存在哈密顿路径,强联通的竞赛图存在哈密顿回路,我可以结合出这样一个问题:三维,若 i 有两维大于 j ,则可以利用 i 消除 j ,请构造一个最长的消除序列。我知道最长的消除序列的长度一定是 n ,构造也可以暴力构造,时间复杂度为 O(n ^ 2) ,我还想不到能不能利用偏序的一些性质把复杂度优化。

3、「AGC 003d」Anticube:给定 100000 个 10 ^ 10 以内的数,选择尽可能多的数,使得两两乘积不为 cube 。

分析乘积不为 cube ,容易想到素数分解,每个素数的指数可以先化简到 0 到 2 之间。当 p 一定的时候,pq 为 cube 的 q 唯一确定,换句话说,为 cube 的数一一对应,所以做法大致就是对于每对数,取出现次数的 max 相加即可。化简时,考虑被化简的素数满足 p ^ 3 < 10 ^ 10 ,所以只用枚举 p < 10 ^ {10 / 3} 。求补数时,对于 p ^ 3 < 10 ^ 10 ,进行暴力取补,分解剩下的只可能是 p ^ 2 ,p, 或 pq ,判断是不是完全平方数就可以处理补数了。

另外,这道题的补数的数值可能会爆 long long ,正确的做法是不用处理它,因为我们不在意值是多少,只在意值相不相同。

很容易可以把问题推广到两两乘积不为四次方数,化简的时候枚举到 10 ^ {10 / 4} ,求补数的时候要枚举到 10 ^ {10 / 3} ,所以说原题中两个都枚举到 10 ^ {10 / 3} 相同只是巧合。。

5 月 7 日

1、判断一个点是否在多边形内

「PE 201」:给定 1000 个三角形,判断原点在不在三角形内部。判断的方法是看是否都在同一侧,即 Ai × Ai+1 >= 0 是否都成立,或 Ai × Ai+1 <= 0 是否都成立。

原创题:给定若干种比重为 xi + yi + zi = 100% 的原料,每种原料若干,问是否能合成比重为 X + Y + Z 的生产品。保留两维,能合成的部分在凸包的内部,把上凸壳的所有点和下凸壳的所有点找出来,对于每次询问,分别在上凸壳和下凸壳上二分,求出凸壳上 x = X 对应的 Y ,然后判断是否在区间内。

一般地,如果要判断一个点是否在凹多边形内,那么就从这个点引出一条射线,若与多边形有偶数个交点,就在内部,若与多边形有奇数个交点,就在外部。

2、「2017 Multi-University Training Contest 1」:有 10 个位置,最初每个位置上的数值都是 $n = \sum_{i = 1} ^ {10000} p_i ^ {e_i}$ ,满足 $\sigma e \le 300000$ ,每次依此对每个位置操作,把这个位置的数变为某个真因数,某个位置变为 1 的时候结束,问以每个位置结束的方案数对 $998244353$ 取模。

分析如下:

不难想到一个辅助问题:设 $f(i)$ 表示 $n$ 恰好在 $i$ 回合变成 $1$ 的方案数。

先考虑原问题与辅助问题的关系,当前考虑第 x 个位置作为终止位置的方案数,枚举在 i 个回合的时候结束,那么前 x+1 个位置可以看作在第 i+1 个回合结束,后面的位置可以看作在第 i 个回合结束,所以第 x 个位置的答案就是 $\sum_i f ^ {x - 1}(i+1) f ^ {n - x + 1} (i)$ 。

现在考虑如何求解 $f(x)$ ,注意到每个因子之间都是独立的,$k$ 次机会要把每个指数都变为 $0$ ,可以看作一个插板,再来个广义的容斥,就可以得到

$$f(x) = \sum_{k = 1} ^ x (-1) ^ {x - k} \binom{x}{k} \prod_{i = 1} ^ m \binom{e_i + k - 1}{k - 1}$$

$f(x)$ 可以直接卷积求出。

注意到 $e_i$ 的和为 $300000$ ,所以取值个数为 $O(\sqrt n)$ ,所以直接暴力求 $\prod_{i = 1} ^ m \binom{e_i + k - 1}{k - 1}$ 。

小结:

(1)前 x+1 个位置并没有结束,但是我可以巧妙地把问题看作「取完第一个之后,剩下的全部要取完」,所以每个位置就都独立了。

(2)「一个数,每次变为它的一个因子,变成 1 的时候结束」,可以分开每个素因子来看,每次把指数减小,如果 x 次结束,相当于隔 x-1 块版。

(4)$\sum e$ 的和为 $300000$  ,这隐含的条件是 $e_i$ 的种类数为 $\sqrt 300000$ ,然后就是一个大暴力了。

类似的,记得以前有某道题 $fgh \le 10000$ ,那么存在 $f \le 21$ ,然后暴力枚举 $f$ ,对剩下的两维就有快速做法了。

3、五边形数定理

五边形数从小到大进行排序,可以描述为 ..., 1 / 2 i (3i - 1) , 1 / 2 i (3i + 1) , ... ,实现的时候可以方便地预处理这个顺序。

$$\Phi(x) = \prod_{i \ge 1} (1 - x ^ i) = \sum_{i \in \mathbb{N}} (-1) ^ i x ^ {\frac{1}{2} i (3i + 1)} = 1 + \sum_{i \ge 1} (-1) ^ i x ^ {\frac{1}{2} i (3i \pm 1)}$$

五边形数在前 $n$ 项只有 $O(\sqrt n)$ 项,所以可以暴力求逆,暴力卷积,暴力 XXX ,总之对于多项式的操作,可以做到项数相关,如果项数不多,那么就可以暴力啊。

分拆数:

$$\prod_{i = 1} ^ n (1 + x ^ i + x ^ {2i} + ...) = \prod_{i = 1} ^ n \frac{1}{1 - x} = \frac{1}{\Phi(x)}$$

原创:给定 $n$ ,求 $n$ 元排列中,逆序对个数为 $0, 1, ..., n-1$ 的排列的个数。$i$ 的逆序个数为 $[0, i)$ ,所以直接列生成函数

$$\prod_{i = 0} ^ n (1 + ... + x ^ {i-1}) = \prod_{i = 1} ^ n \frac{1 - x ^ i}{1 - x} \equiv (\sum_i \binom{n + i - 1}{i - 1} x ^ i) \Phi(x) \pmod {x ^ n}$$

分拆数,每个数的出现次数小于 $k$ :

$$\prod_{i = 1} ^ n (1 + x ^ i + ... + x ^ {i(k - 1)}) = \prod_i \frac{1 - (x ^ k) ^ i}{1 - x ^ i} = \frac{\Phi(x ^ k)}{\Phi(x)}$$

分拆数,所有数不重复:这是上一道题的特殊化形式,可以直接用上一道题的方法做。

4、置换相关

「2017 Multi-University Training Contest 1」:给定 $n = 100000$ 元排列 $A$ ,以及 $m = 100000$ 元排列 $B$ ,问有多少个 $[0, n)$ 到 $[0, m)$ 的映射,满足 $f(i) = B_{f(A_i)}$ 。

这道题的 Main Idea 就是把一个 $n$ 元排列看作一个置换,剩下的都水稻渠成。

小结(1) :序列 $a_1, a_2, ..., a_n$ 通常都可以怎么看?可以看作一个数列,每个位置有一个数。可以看作二维平面上的 n 个点。可以看作第 i 个位置有高度为 i 的一堆积木。如果是排列,那么可能会用到每个数字只出现一次的性质进行计数,例如排列的三维偏序。很有可能会把排列看作一个置换,特别涉及到比较复杂的映射的问题。

经典题:对于 n 元置换 f ,给定 f ^ 2 ,请构造一个 f 。原来的置换无疑是一个重要的辅助元素,考虑对原先的置换的循环节分大小为奇数、偶数继续讨论,将新的置换拆成若干个循环节,对大小为偶数且相同的两个循环拼起来,大小为奇数的直接自己造自己。

今天基本上都用来思考这样一个推广:对于 n 元置换 f ,给定 f ^ n ,请构造一个 f ,并问有多少个 f ,对 998244353 取模。对原先一个大小为 $a$ 的置换,会分解为 $(a, n)$ 个大小为 $\frac{a}{(a, n)}$ 的置换。对新的置换来说,先把它进行分解,设 c(b) 表示大小为 b 的置换的个数。考虑枚举所有的 b ,并尝试进行合并。考虑可以将多少个大小为 b 的东西进行合并,设个数为 d ,则要满足 $(b, \frac{n}{d}) = 1$ ,所以 $d = (n, b) k$ ,如果 $(n, b) \nmid c(b)$ ,那么说什么都不可以,否则就可以构造了。至于方案数,设 $f(x)$ 表示将 $x$ 个大小为 $b$ 的置换进行若干次合并的方案数,则有 $f(x) = \sum_{i = 1} ^ x \binom{x - 1}{i - 1} f(x - i) g(i)$ ,$g(d)$ 表示将 $d$ 个大小为 $x$ 的东西合并在一起的方案数,若 $(n, b) \nmid d$ ,那么 $g(d) = 0$ ,否则钦定第一个位置,对第一个循环节内的元素进行钦定——钦定每个置换的放置顺序,以及放置那一个元素,所以 $g(d) = (d - 1) ! s ^ {d - 1}$ 。这时候可以进行分治 FFT ,或者 EGF ,$F = e ^ G$ 。

5 月 8 日

1、多路归并:给定 10 个长度为 100000 的序列,每个序列中选择一项,求和的前 100000 小。

可以考虑每次合并两个序列,取前 100000 小。第一种做法,把两个序列从小到大排序,那么每次的决策对象只有 O(n) 个,可以在一维平面上拓展,也可以在二维平面上拓展。第二种做法,注意到要满足 ij <= n ,所以只有 O(n log n) 个,把这些东西取出来,然后排序。

可以考虑直接做 K 维,直接在 K 维超几何体上 BFS ,用堆维护较优决策点,每次选择一个最优的对象拓展,然后枚举周围的点,若它的每一维都被紧密相接了,那么加入较优决策点的集合中,实现起来会有些麻烦。

「2017 Multi-University Training Contest 1」:给定一个仙人掌,求前 K 小的生成树。把仙人掌的每个环上的点权弄出来,然后就是上面的问题了。

2、「2017 Multi-University Training Contest 1」:对于每个位置 i ,给定 L[i] <= i <= R[i] ,问有多少个 1 到 n 的排列,满足对于任意的 i ,当且仅当 L[i] <= l <= i <= r <= R[i] ,a[i] = min(a[l], ..., a[r]) 。

也就是说 i 在 L[i] 到 R[i] 之间最小,且对于更大的区间都不满足。

对整体而言,一定有一个最小值的位置 x ,这个最小值的 L = 1, R = n 。对于其他的 L, R ,一定不会过点 x ,所以会被划分到 x 的两侧,所以只需要对两侧进行递归处理。假如先递归左边,再递归右边,那么每次找到的区间的顺序就是按照左端点递增、右端点递减进行排序的顺序。

先考虑判定有没有解。那么就对区间进行双关键字排序,然后直接模拟,进行判定下个区间是否满足要求 L = 当前分治的 l ,R = 当前分治的 R 。

考虑统计方案数,每次左子树大小为 x ,右子树大小为 y ,那么贡献 $\binom{x + y}{x}$ 。

3、今天基本上都在看概率生成函数,还没干完。

5 月 9 日

今天学了挺多东西的。

一、连通图与一般图计数

设某个图上的性质 X ,若每个连通块满足性质 X ,那么整个图满足性质 X 。

设 f(x) 为 x 个点的满足性质的连通图个数,g(x) 为 x 个点的满足性质的图的个数。

一方面,有

$$g(x) = \sum_{i = 1} ^ x \binom{x - 1}{i - 1} f(i) g(x - i)$$

$$f(x) = g(x) - \sum_{i = 1} ^ {x - 1} \binom{x - 1}{i - 1} f(i) g(x - i)$$

另一方面,设 f(x), g(x) 的 EGF 为 F(x), G(x) ,有

$$F(x) = e ^ {G(x)}$$

$$G(x) = \ln F(x)$$

用处一:给定第一方面,可以使用分治 FFT 的做法,也可以转化为第二方面,求 exp 或者求 ln 。

用处二:求 exp 的问题,可以通过这个组合意义,在 O(n ^ 2) 实现。

二、预处理第一类斯特林数行、第一类斯特林列、第二类斯特林数行、第二类斯特林列、Bell 数

第二类斯特林数:

(1)第二类斯特林数行

根据容斥原理,

$${n \brace m} = \sum_{i = 0} ^ {m} (-1) ^ i \binom{m}{i} (m - i) ^ n$$

(2)第二类斯特林列,OGF

$${n \brace m} = {n - 1 \brace m - 1} + m {n - 1 \brace m}$$

设 $F_m(x)$ 为 $x \brace m$ 的 OGF ,那么有

$$F_m(x) = F_{m - 1}(x) x + F_m(x) m x$$

$$F_m(x) = \frac{x}{1 - m x} F_{m - 1}(X)$$

$$F_m(x) = x ^ m \prod_{i = 1} ^ m \frac{1}{1 - ix}$$

可以利用 ln-exp 的科技求解 $F_m(x)$ 。

(3)第二类斯特林列,EGF,以及第二类斯特林行的另外一种看法

考虑 EGF ,$n$ 个点的满足性质的连通图只有一个,所以 EGF 为 $e ^ x$ ,所以 $n$ 个点且恰好 $m$ 个连通块的图的个数的 EGF 为

$$F_m(x) = \frac{(e ^ x - 1) ^ m}{m !}$$

可以用来处理一列的第二类斯特林数。

这种形式也可以推出一行的第二类斯特林数,原理是直接对上面的生成函数进行二项式展开,并取第 $n$ 项:

$${n \brace m} = [x ^ n] \frac{(e ^ x - 1) ^ m}{m !} = [x ^ n] \frac{\sum_{i} \binom{m}{i} e ^ {ix} (-1) ^ {m - i}}{m !} = \frac{1}{m !} \sum_i \binom{m}{i} i ^ n (-1) ^ {m - i}$$

第一类斯特林数:

(1)第一类斯特林行

根据组合意义,可以推出

$$x ^ {\overline{n}} = \sum_{i} {n \brack i} x ^ i$$

上面这个式子还有另外一种推法,就是根据

$${n \brack m} = (n - 1) {n - 1 \brack m} + {n - 1 \brack m - 1}$$

利用 OGF ,有

$$F_n(x) = (n - 1) F_{n - 1} (x) + F_{n - 1}(x) x = (x + n - 1) F_{n - 1} (x) = ... = x ^ {\overline{n}}$$

第一种做法是分治 FFT ,第二种做法是倍增 + FFT ,可以用来处理一行的第二类斯特林数。

(2)第一类斯特林列

利用 EGF ,$n$ 个点的满足性质的连通图个数为 $(n - 1) !$ ,EGF 为

$$F(x) = \sum_i \frac{(i - 1) ! x ^ i}{i !} = \sum_i \frac{x ^ i}{i} = - \ln (1 - x)$$

所以第一类斯特林列的 EGF 为

$$G(x) = \frac{{- \ln (1 - x) - 1} ^ m}{m !}$$

Bell 数:

类似第二类斯特林列的 EGF 做法,Bell 数的 EGF 显然为

$$G(x) = e ^ {e ^ x - 1}$$

三、斯特林反演

$$f(x) = \sum_i {x \brace i} g(i) \Leftrightarrow g(x) = \sum_i (-1) ^ {x - i} {x \brack i} f(i)$$

$$f(x) = \sum_i {x \brack i} g(i) \Leftrightarrow g(x) = \sum_i (-1) ^ {x - i} {x \brace i} f(i)$$

证明的话,大概就是用几条式子进行展开,得到两条第一类与第二类的卷积式,然后就可以轻易证明这四个关系。

斯特林反演可以用来解决连通图的相关问题,不仅可以处理连通图的问题,还可以处理 10 个连通图的问题,还可以定义连通块的大小为集合 $S$ 中的数是合法的,通过 Stirling 反演,也可以求出迷之容斥系数。

对于连通的问题,大致能回忆其连通图与一般图计数,还有就是斯特林反演。

「例题」10 个点的一张简单图,问有多少个边的子集,满足保留子集中的边后,该图连通。

考虑钦定若干个块,块之间没有连边,块內随便连,然后贡献上容斥系数后累加,现在求解容斥系数。

设我有某个实际上是 $x$ 个连通块的方案,它应该被计算 $[x = 1]$ 次,实际上在所有更仔细的分块中被统计,所以

$$[x = 1] = \sum_i {i \brace x} f(i)$$

$$f(x) = (-1) ^ {x - 1} {x \brack 1} = (-1) ^ {x - 1} (x - 1) !$$

再说 「BZOJ」上「异或图」一题,也是用到相同的思想。

四、无向欧拉图的一些计数问题

「问题一」n 个点带标号每个连通块有欧拉回路的图的个数。

考虑构建生成树,生成树外的边的一种选择方案,树边可以通过树形 DP 唯一确定选择方案,所以答案为

$$cnt = 2 ^ {\binom{n}{2} - n + 1}$$

「问题二」n 个点带标号连通欧拉图个数。

「问题三」给定一张图,每个点有奇偶性 $d_i$ ,问有多少种边的保留方式,使得每个点的度数满足奇偶性要求。

如果一个连通块内的 $\sum d$ 为奇数,直接无解,否则设 $C$ 为连通块个数,答案为

$$cnt = 2 ^ {m - n + C}$$

「问题四」给定一张图,求有多少个满足每个连通块有欧拉回路的边的子图。

「问题五」给定一张图,求满足每个连通块有欧拉回路的边的子图的边数的平方和。

「问题六」60 个点无标号图个数。

套用 Burnside ,枚举所有的置换,分解成若干个循环节,循环节内部可怜 $\left\{ \frac{s}{2} \right\}$ 条边,两个循环节可怜 $(s_1, s_2)$ 条边,所以总共的方案数为

$$2 ^ {\sum \left\{ \frac{s_i}{2} \right\}} + \sum (s_i, s_j)$$

发现答案只与分拆方案有关,所以考虑枚举所有分拆,并统计一种分拆可以对应多少个置换,个数可以看作对 $n !$ 种排列都进行生成,然后再去重,应该是

$$\frac{n !}{ \prod_{\text{每种 si ,出现 ci 次}} s_i ^ {c_i} c_i ! }$$

 「问题七」「原创」60 个点每个连通块有欧拉回路的图的个数。

枚举每种分拆。

对于一个大小为 s 的循环,考虑内部的连边,若 s 为奇数,那么所有连边都不会产生影响;若 s 为偶数,那么 distance 为 s / 2 的连边会使每个点的度数的奇偶性异或一,其他可以随便连。

考虑两个连通块之间的连边,设循环大小为 s1, s2 ,则有 (s1, s2) 次机会,左边的每个点向右边连 s2 / (s1, s2) 条边,右边的每个点向左边连 s1 / (s1, s2) 条边。若 s2 / (s1, s2) ,s1 / (s1, s2) 都是偶数,那么随便连。若存在一个奇数,那么有 (s1, s2) 个机会对 A 中所有点异或一。若两个都是奇数,则有 (s1, s2) 次机会,对 A、B 中所有点异或一,我们在两个点之间连边,边权为 (s1, s2) 。

到这里,可以看出一个循环内所有点的度数奇偶性一致,所以可以把每个循环看作一个大点,来进行分析,设 d(x) 为大点 x 能够异或一的机会次数,即

$$d(x) = \sum_{\text{odd, even} (s_x, s_?)} + [\text{s(x) is even}]$$

问题变为:每个点可以选择 d(x) 次异或一的机会,连边的两个点之间可以选择边权次异或一的机会,问有多少种选择方案,使得每个点最终为 0 。

分每个连通块进行讨论,这个连通块的单点异或次数一定要是偶数,而且是偶数时,边的选择方案都为 $2 ^ {\sum_{odd, odd} (s_i, s_j)} - \text{点数} + 1$ 。与点的选择方案独立,所以直接相乘。设 $C = \sum d$ ,那么点的异或方案为

$$\sum_{2 | i} \binom{C}{i} = [C = 0] + [C \ne 0] 2 ^ {C - 1}$$

组合解释是对于前面 $C - 1$ 个的选择方案,最后一个都有唯一的选择方案与之对应。代数证明可以通过数学归纳法,或者用单位复数根和二项式定理。

综上所述,答案为

$$\text{answer} = \frac{1}{n !} \sum_{\text{分拆} P \in \text{Split}(n)} \frac{n !}{ \prod_{\text{每种 si ,出现 ci 次}} s_i ^ {c_i} c_i ! } 2 ^ {\sum \lfloor \frac{s_i}{2} \rfloor + \sum_{\text{even, even}} (s_i, s_j)} \prod_{\text{连通块}} 2 ^ {\sum_{odd, odd} (s_i, s_j) - \text{点数} + 1} \times ([\sum d = 0] + [\sum d \ne 0] 2 ^ {\sum d - 1})$$

 「问题八」10 个点连通欧拉图计数

只需要再套用一个斯特林反演,就可以解决这个问题啦,时间复杂度为 n * sum ( Bell(i) * 把 n 分拆成 i 个数的方案 )。

这个问题还不太会做,因为不能保证一个循环节内部的连通性。

五、一个卷积

$$C(x) = \sum_{i - j = x} A(i) B(j)$$

做的时候相当于把 B 反过来做,附上了 $n - 1$ 的位移。

比如说,容斥原理带来的一些 FFT 的问题,最令我恼火的是

$$g(x) = \sum_{i = x} ^ n (-1) ^ {i - x} \binom{i}{x} f(x)$$

六、抛硬币一类的问题,概率生成函数,2018 集训队论文第一篇

(1)设离散随机变量 X 的概率生成函数为

$$F(x) = \sum_{i} P(X = i) x ^ i$$

它可以比较方便简介的求出随机变量 X 的期望和方差:

$$E(x) = \sum_i i P(x = i) = F'(1)$$

$$E(x ^ \underline{k}) = \sum_i i ^ {\underline{k}} P(x = i) = F ^ (k)(1)$$

$$Var(x) = E(X ^ 2) - E(X) ^ 2 = F''(1) + F'(1) - F'(1) ^ 2$$

(2)Matrix67 的书里的一道题目的我想到的五种解法

抛硬币,问首次出现连续两次朝上的期望次数。

「做法一」期望的定义

$$answer = \sum_i i \frac{1}{4} f(i - 2)$$

$f(x)$ 表示抛到第 $x$ 次,第 $x$ 次朝下,之前没有发生过两次朝上的概率,那么

$$f(x) = \frac{1}{4} f(x - 2) + \frac{1}{2} f(x - 1)$$

构建 OGF ,有

$$F(x) = \frac{4}{1 - 2x - x ^ 2}$$

$$answer = \frac{1}{4} (F'(1) + 2F(1)) = 6$$

「做法二」期望的阿贝尔求和形式的定义

$$answer = \sum_{i \ge 0} P(X > i) = \sum_i \frac{1}{2} f(i - 1) + f(i) = \frac{3}{2} F'(1) = 6$$

「做法三」概率生成函数

设 $f(i)$ 表示 $i$ 次恰好结束的概率,$g(i)$ 表示 $i$ 次没有结束的概率,对应的 OGF 为 $F(x), G(x)$ ,那么

$$F(x) + G(x) = 1 + x G(x)$$

$$G(x) \frac{x ^ 2}{4} = (\frac{x}{2} + 1) F(x)$$

对第一条式子求导并代入 $x = 1$ ,有

$$F'(1) = G(1)$$

对第二条式子带入 $x = 1$ ,很容易解得

$G(1) = 6$

「做法四」直接设期望的状态

设 f(i) 表示当前凑到了 i 个向上,到凑到两个向上的期望次数。

f(0) = 1 + 1 / 2 f(0) + 1 / 2 f(1)

f(1) = 1 + 1 / 2 f(0) + 1 / 2 f(2)

f(2) = 0

解一下方程,答案就出来了。

「做法五」期望的线性性质

设 f(i) 表示当前凑到了 i 个向上,到凑到 i+1 个向上的期望次数。

f(0) = 1 / (1 / 2) = 2

f(1) = 1 + 1 / 2 (f(0) + f(1)), f(1) = 4

所以答案为 f(0) + f(1) = 6 。

(3)一个北京集训时的题目

给定一个字符集为 m ,长度为 L 的字符串 S ,每次在末尾随机生成一个字符,问期望多少次出现 S 。

设 f(i) 表示 i 回合结束的概率,g(i) 表示 i 回合没结束的概率,类似的列一列式子,第二个式子就考虑对 「在一个未出现 S 的状态后添加一个 S 后,这个得到的状态的概率」进行算两次,一方面可以看作 $g_{cur - L} \frac{1}{m ^ L}$ ,一方面可以看作 $\sum_i a_i f(cur - (L - i)) \frac{1}{m ^ {L - i}}$

$$F(x) + G(x) = 1 + x G(x)$$

$$G(x) \frac{x ^ L}{m ^ L} = \sum_i a_i \frac{x ^ {L - i}}{m ^ {L - i}}$$

对第一个式子求导并代入 $x = 1$ ,然后对第二个式子代入 $x = 1$ ,就能求出当时我百思不得其解的简单结论:

$$E(x) = \sum_i a_i m ^ i$$

(4)多个串的问题

SDOI 硬币游戏

(5)一个有趣的概率问题:每次随机 $1$ 到某个偶数 $n$ ,若 $x$ 为奇数,那么计数器清零,若 $x$ 为偶数,那么计数器加一,且若 $x = n$ ,则停止,求结束时计数器的期望值。

从这个例子可以看出,可以通过概率或者期望来列关系式。

5 月 10 日

一、一个经典结论

元素两两不同、长度为 $n ^ 2 + 1$ 的序列要么存在长度为 $n+1$ 的上升子序列,要么存在长度为 $n+1$ 的下降子序列。

证明一:

问题可以转化为,该序列的长度为 $n$ 的下降子序列的长度最多为 $n$ ,求证该序列存在长度为 $n+1$ 的上升子序列。

看到子序列,容易想到 DP 的方法,所以我们引入这样一个辅助元素:设 $f(i)$ 表示以 $i$ 为开头的最长下降子序列的长度。

然后我思考的方向是去发现 $f$ 与上升子序列的关系,开始并没有什么发现,所以就直接尝试观察 $f$ 的性质。对于某个位置 $x$ 作为开头,我应该怎样取它的所有最长下降子序列?那么肯定要取 $y > x, f[y] = f[x] - 1$ 。考虑若干个 $y$ 之间的关系,发现对于 $y_1 < y_2, f_{y_1} = f_{y_2}$ ,肯定有 $a_{y_1} < a_{y_2}$ ,否则 $f_{y_1}$ 就可以由 $f_{y_2}$ 进行更新。所以对 $x$ 的研究也不需要了。

对于 $f$ 值相同的 $y_1 < y_2 < ... < y_m$ ,肯定有 $a_{y_1} < a_{y_2} < ... < a_{y_m}$ 。而注意到 $f$ 的取值只有 $1, ..., n$ ,所以根据鸽巢定理,一定存在一个 $f$ 的取值,满足 $m \ge n+1$ ,所以存在长度为 $n+1$ 的上升子序列。

证明二:

直接利用 dilworth 定理,最长下降子序列可以看作最长反链,数值上等于最小链划分,而最长上升子序列的长度最多为 $n$ ,所以链划分至少为 $n+1$ 。

猜你喜欢

转载自www.cnblogs.com/Sdchr/p/8986063.html