纯纯的随笔
1. 有向图欧拉回路计数:
欧拉回路与一颗 \(1\) 为根且非树边排列好的内向树形成双射。
欧拉回路映射内向树:把最后一条边看做树边,剩下走过的看做非树边。
内向树映射欧拉回路:能按顺序走非树边就先走非树边,最后走树边。
于是答案是 \(T_1d_1!\prod_{i=2}^n(d_i-1)!\),其中 \(T_1\) 是以 \(1\) 为根的内向树数量,可以矩阵树定理求出。
不要求终点也可以钦定 \(1\) 是终点,非树边中 \(1\) 的第一条边是访问边,答案是 \(T_1\prod_{i=1}^n(d_i-1)!\)。
2. \(f_0\) 和 \(f_{n+1}\) 恒为 \(0\) 如何转化为多项式
比如有 \(n\) 行 \(m\) 列个点,可以从 \((i,j)\) 走到 \((i+1,j-1),(i+1,j),(i+1,j+1)\),但是不能出界,很像乘上 \(x^{-1}+1+x\),但是由于 \(f_0,f_{n+1}\) 恒为 \(0\),所以不能直接转化。
考虑把 \(f\) 翻转并取反拼到原先的 \(f\) 后面,于是发现当下标是模 \(2m+2\) 意义下时,\(f_0\) 和 \(f_{m+1}\) 可以保证是 \(0\),于是可以用多项式算法优化 dp。
3.确定度数的有根树计数
根据 Prufer 序列,考虑每一个点儿子度数 \(d_i\),则会在序列中出现 \(d_i\) 次,而根是 \(d_i-1\) 次,那么方案数就是 \(\frac{(n-2)!}{\prod_{i=1}^n(d_i-1)!}\)。
4.旋转置换下的 Polya 定理
\(|X/G|=\frac{\sum_{i=1}^nG(\gcd(i,n))}{n}\)
5.线段树小技巧
当你要求线段树上信息的并,但是发现 tag 不好 pushdown 也不能 pushup 怎么办呢,我们可以标记持久化。
糟糕,查询是区间查,这下完了。
我们可以打两个 tag,一个表示经过这个节点的 tag1,另一个表示完全包含这个节点的 tag2。
查询的时候可以查询经过的节点的 tag2 和完全包含的节点的 tag1,你会发现这是对的。
6.容斥小技巧
dp 状态时恰好为 \(k\) 时可以考虑转变成最多为 \(k\),尝试凑出一个选择只改变数量不改变状态的元素,比如将所有元素减去最小值,得到一个 \(0\),输出答案时加上 \(k\times x\) 就好。
关于最大公因数为 \(x\) 的题可以考虑先算出公因数为 \(x\) 的数,然后从大到小减去多算的情况。
两个相互独立的维度是可以分别容斥的。
7.建立双射
走投无路的时候,考虑找到另一个东西,与原题要求的形成双射,可能会豁然开朗。
8.dp 小技巧
按值域枚举,按下表枚举,按限制从紧到松枚举。
本文来自博客园,作者:mikefeng,转载请注明原文链接:https://www.cnblogs.com/mikefeng/p/17499447.html

浙公网安备 33010602011771号