Examples

2023-9-24 #70 谁擦去故事句点

——《碎镜》

(不知道怎么标作者,放个链接吧)

496 ARC143F Counting Subsets

注意到在背包的过程中,第一个产生 \(2\) 的数很特殊,假设此时左右侧均有 \(k\)\(1\)。归纳可证,背包左右侧 \(1\) 个数恒为 \(k\),且转移形如“将中间部分复制一遍,并在两份中间插入长度 \([a,2a]\) 的段”。

问题对大于 \(n\) 的数并没有限制,我们可以在最后形成的方案基础上,任选一个 \(1\) 加入集合,因此我们需统计所有方案最后一个 \(2\)\(n\) 距离之和。

不会 dp,放弃了。

啥时候回来看看:https://www.cnblogs.com/leukocyte/p/16500383.html

497 ARC122F Domination

不妨先考虑 \(k=1\)

首先删去被二维偏序的红点,那么所有红点形态应 \(x\) 递减 \(y\) 递增。

合法方案肯定是每个蓝色石子覆盖一个区间,区间并为全集。不妨考虑蓝色石子 \(i\) 覆盖 \([l,r]\) 的代价:\(\max(ry_l-by_i,0)+\max(rx_r-bx_i,0)\),两维是相对独立的,于是考虑建图来描述 \((0,ry_l)\rightarrow (0,by_i)\rightarrow (bx_i,0)\rightarrow(rx_r,0)\rightarrow\cdots\) 这一过程:

  • 建立 \((x,0)\rightarrow(x+1,0),(0,y+1)\rightarrow(0,y)\),边权为 \(1\),表示造成贡献;
  • 建立 \((x+1,0)\rightarrow(x,0),(0,y)\rightarrow(0,y+1)\),边权为 \(0\),表示被 \(0\) chkmax 的路径。
  • 建立 \((0,by_i)\rightarrow(bx_i,0)\),边权为 \(0\),表示使用该蓝色石子;
  • 建立 \((rx_i,0\rightarrow(0,ry_{i+1})\),边权为 \(0\),表示拼接区间。

答案即从 \((0,ry_1)\)\((rx_n,0)\) 的最短路。

接下来考虑 \(k\) 更大的情况,我们有结论——任意合法方案都能拆成 \(k\) 个独立的 \(k=1\) 方案,最短路变为费用流即可(记得限定蓝色石子只能用一次)。

498 ARC118F Growth Rate

从后往前 dp,记 \(f_{i,j}\) 表示确定 \(X_i=j,X_{i+1},\cdots,X_n\) 的方案数,转移是后缀和形式。

归纳可证 \(f_i\) 是关于 \(j\)\(n-i+1\) 次多项式,于是可以考虑插值,仅保存前 \(n-i+1\) 项的系数,转移时暴力线性插值,这样就能做到 \(O(n^3)\)

根据经典性质只有 \(\log V\) 个非一 \(A_i\),对于 \(A_i=1\) 容易处理,复杂度 \(O(n^2\log V)\)

499 loj#6363. 「地底蔷薇」

先解决一个子问题:P5827 点双连通图计数

记有根连通无向图的 EGF 为 \(C(x)\),有根点双的 EGF 为 \(F(x)\),将根所在的点双去除可以得到:

\[C(x)=x\exp(\sum_{i\geqslant 1}\frac{C^i(x)}{i!}[x^{i+1}]F(x))\\ \ln\frac{C(x)}{x}=F'(C(x))\\F'(x)=\ln\frac{x}{D(x)}\]

其中 \(D(x)\)\(C(x)\) 复合逆,这种形式提示我们使用扩展拉格朗日反演,令 \(H(x)=\frac{D(x)}{x}\)

\[[x^n]F(x)=[x^n]H(D(x))=\frac 1n[x^{n-1}]H'(x)(\frac{x}{C(x)})^n \]

可以 \(O(n\log n)\)\([x^n]\) 系数。

回到原题,由于保证了 \(\sum_{x\in S} x\),我们不妨求出所有合法 scc 大小对应 EGF \(P(x)\),记有根合法无向图的 EGF 为 \(Q(x)\),剥去根所在 scc 同样能列出式子,再次使用扩展拉格朗日反演即可。

复杂度 \(O(n\log n)\)(默认 \(n\)\(\sum_{x\in S}x\) 同阶)。

500 P9480 [NOI2023] 深搜

容斥,钦定特殊点集合 \(S\),求以 \(S\) 内任意点为根都为返祖边的边数 \(e\),那么对答案的贡献为 \((-1)^{|S|-1}2^e\)

考察 \(S\) 内点形成的虚树,合法的边即虚树某条边上对应的边,或者某一 \(S\) 内点向虚树外延伸子树的返祖边。

先考虑特殊性质 B 怎么做:

此时第二类边较好刻画,提前统计完全在某个点子树内部/外部的边数即可。

\(1\) 为根,尝试在虚树 lca 统计虚树的贡献。令 \(f_x\) 为仅考虑 \(x\) 子树内,且 \(x\) 在虚树上的系数和,转移形如:

若子树 \(y\) 未选择点,其造成 \(2^{p_y+c}\) 贡献(\(p_y\) 为完全在子树内的边数,\(c\)\(x\)\(y\) 子树内部连的边数);否则贡献应为(\(a\) 为完全被 \(x\rightarrow z\) 包含的边数,\(b\) 为所有 \(x\rightarrow z\) 非端点的位置向路径外延伸到子树内的边数):

\[\sum_{z\in \operatorname{subtree}(y)}f_z2^{a+b} \]

该系数容易使用区间乘,区间求和的线段树在 dfs 序上维护。

注意虚树上的点 \(x\) 可能不在点集 \(S\) 内,但若其非虚树整体 lca,其一定有至少三棵子树有点,我们可以直接将其视作关键点而不造成额外影响,并单独考虑虚树整体 lca 的合并,这并不困难。

接下来考虑有横叉边怎么处理:

横叉边不会影响所有点集内,或是有三棵子树有关键点的点,于是其只可能对虚树整体 lca 有影响。对于横叉边 \((x,y)\),其会对 \(u\in\operatorname{subtree}(x),v\in\operatorname{subtree}(y)\) 的合并产生 \(2\) 的系数。

此时问题可以被刻画为:二维平面,初始 \((x,y)\) 位置值为 \(f_x\cdot f_y\),并做若干次矩形乘 \(2\),求所有位置之和。扫描线足够了,复杂度 \(O(n\log n)\)

posted @ 2023-09-24 22:32  xiaoziyao  阅读(173)  评论(5编辑  收藏  举报