我头上有鸡脚 鸡脚(待完坑)
TallBanana · · 学习·文化课
CF901D
抽出一棵生成树,可以满足除了根结点以外的值。\ 考虑非树边
(u,v) ,如果构成偶环,则没有影响。\ 如果构成奇环,那么如果对于环\pm 1 ,根节点的影响是\pm 2 ,判断一下合法性即可。
CF1616H/qoj4431
对
a 建 Trie,设f_u 表示在u 子树内选数的方案数。发现转移需要用到g_{x,y} 表示在x,y 子树内各选非0个数合法的方案。那我们不妨把f_u 变成g_{u,u} 来表示。\ 考虑g_{x,y} 的转移,如果k 在当前位为0 ,那么g_{x,y}=g_{ls(x),ls(y)}+g_{rs(x),rs(y)} 。\ 否则,令s_u=2^{siz_{u}}-1 ,分讨:
x=y$,$g_{x,x}=g_{ls(x),rs(x)}+s_{ls(x)}+s_{rs(x)} $s_{ls(x)}s_{ls(y)}+s_{rs(x)}s_{rs(y)}$:$x,y$ 都只在同侧选。\ $g_{ls(x),rs(y)}+g_{rs(x),ls(y)}$:$x,y$ 选了相反的子树。\ $g_{ls(x),rs(y)}(s_{rs(x)}+s_{ls(y)})+g_{ls(y),rs(x)}(s_{rs(y)}+s_{ls(x)})$:一边两个子树都选,一边只选一个子树。\ $g_{ls(x),rs(y)}g_{ls(y),rs(x)}$:四个子树都选。 总复杂度
O(n\log V) 。
CF1830D
考虑一开始先把所有贡献按照
\mathrm{mex}=2 算,然后通过树形 dp 减去最小的贡献。\ 设f_{u,i,0/1} 表示u 所在连通块颜色为0/1 ,大小为i 。转移是容易的,O(n^2) 。\ 考虑优化。注意到,如果我们交替染色,那么损失量为1.5n ,这给了一个很好的上界。对于f_{u,i,0/1} ,其损失量至少为i(i-1)/2+n-i ,于是i\le \sqrt n+1 。复杂度O(n\sqrt n) 。
P8885
定义奇串为:有奇数个本质不同子序列(包含空子序列)的串。\ 定义好串为:有奇数个子串是奇串的串。这等价于其所有子串的的本质不同子序列个数之和为奇数。\ 考虑奇串的判定:设
f_{i,c} 表示以c 结尾的子序列(非空)个数,那么f_{i,a_i}=f_{i-1,0}+f_{i-1,1}+1 ,f_{i,1-a_i}=f_{i-1,1-a_i} 。\ 先滚动数组,于是i 这一维我们先去掉。\ 考虑引入f_U=f_0+f_1+1 ,表示全部的子序列个数,在模 2 意义下,加入x 后,变化如下:
f_x=f^{\prime}_U f_U=f^{\prime}_U+f^{\prime}_{1-x}+1=2f^{\prime}_U-f^{\prime}_x=f^{\prime}_x 发现是交换
f_x,f_U 。对于初始状态,f_U=1,f_{0/1}=0 ,于是满足只会存在一个 1。\ 考虑好串的判定:那么我们对于串扫描线,记录当前以i 结尾的字串有多少个是f_{U/0/1}=1 的,并记录奇串个数tot ,这些都可以在\bmod 2 意义下记录,于是共有 16 种状态。\ 考虑带?的情况:我们需要分别记录上述 16 种状态分别有多少个,dp 即可。\ 考虑子串查询:这个 dp 就是可以写成是一段矩阵的乘积,那么考虑猫树分治,复杂度O(16^2 (n\log n+q))
CF1456E
这个题怎么一直纠缠我。
先考虑单个数的上下界
l\le x \le r 限制。首先l,r 的 lcp 部分x 是固定的。然后 lcp 之后,如果选了0 ,那么脱离了r 的限制,如果选了1 ,那么脱离了l 的限制。之后只需要考虑一个的限制,最后这个限制会在某个时刻消失。\ 考虑一个贪心,如果我们知道i\sim j 这个区间内最晚完全解除限制的位,那么往下的位置可以随便选。\ 于是我们可以设计一个区间 dp,f_{i,j,d,0/1,0/1,0/1,0/1} ,表示区间[i,j] 都已经脱离了限制,考虑了\ge d 的数位,x_{i-1} 的上下界限制,x_{j+1} 的上下界限制。\ 考虑转移:
CF1500F
qoj2210
P10107
考虑使用 bfs 将点标号,对于
u 子树内同一层的节点的 bfs 序标号是连续的。\ 一些记号:
- 设
L_{u,i} 表示u 子树内深度为i 的编号最小的点。- 右侧点集:
u 子树内深度为i 的右侧点集为R_{u,i}=\{v|dep_v=i,i\ge L_{u,i}\} - 右下方点集:
u 的右下方点集为D_u=\cup_{i=dep_u} R_{u,i} 。- 把原本的点权用
a 数组表示。预处理数组
cnt_{u,i} 表示\sum_{v\in D_{u}} \left\lfloor\frac{a_v}{2^i}\right\rfloor\bmod 2 ,转移是容易的。\
P10084
考虑
F(x,a,b) 是多少?通过辗转相除法,不妨设a\le b ,则x^b-1 \bmod x^a-1=x^b-1-x^{b-a}(x^a-1)=x^{b-a}-1 ,于是最后得到x^{\gcd(a,b)}-1 ,再加一就变成x^{\gcd(a,b)} 了。问题转化为求[1,km] 的答案。\ 列出生成函数,我们求[x^0]\prod_{i=1}^{km} (x^i+1)\bmod x^m-1 。\ 注意单位根反演:[m|i]=\frac{1}{m}\sum_{k=0}^{m-1}\omega_m^{ik} 。\ 设f(x)=\prod_{i=1}^{km}(x^i+1) ,答案为\frac{1}{m}\sum_{i=0}^{m-1}f(\omega_{m}^{i}) 。\ 注意到z^m-1=\prod_{i=0}^{m-1}(z-\omega_m^i) ,代入z=-1 得到\prod_{i=0}^{m-1} (\omega_m^i+1)=2(m\bmod 2) 。\ 设i|m ,且m/i 是奇数,于是f(\omega_m^i)=2^{ki} 。原式等于\frac{1}{m}\sum_{i|m,m/i\bmod 2=1} 2^{ki}\varphi(m/i) 。