做题记录 25.2.3

\(\textcolor{purple}\odot\) [ABC329G] Delivery on Tree

以下默认 \(l=\operatorname{lca}(s,t)\),令 \([u\to v)\) 表示 \(u\)\(v\) 的有向路径上的节点,含 \(u\) 但不含 \(v\)\((u\to v)\) 同理

显然要求遍历过程为 \(dfs\)

因为为二叉树,每个节点儿子至多两个,因此只要对于两个儿子的节点决策两个儿子遍历的顺序即可

对于一条路径 \(s\to t\),若 \(l\ne s\)\(l\ne t\),令 \(ls\)\(l\)\(s\) 方向上的儿子,\(lt\)\(t\) 方向上的儿子,则由于 \(s\) 必须在 \(t\) 的前面访问,对于节点 \(l\) 这相当于强制令 \(ls\)\(lt\) 之前遍历,以下称此为一条 限制

若存在两条限制互相冲突,则显然答案为 \(0\)

先考虑最优情况,即每个球在起点处拿起后直达终点,中间没有绕路

\(L^{\uparrow}_u\) 表示所有给定的有向路径中,包含有向边 \(u\to fa_u\) 的数量,\(L^{\downarrow}_u\) 表示包含 \(u\gets fa_u\) 的数量,\(u=1\) 时两者为 \(0\)

则对于每条路径 \(s\to t\),会令 \([s\to l)\) 所有点的 \(L^{\uparrow}_\ast\) 加一,令 \([t\to l)\) 所有点的 \(L^{\downarrow}_\ast\) 加一

容易树上差分 \(O(m\log n+n)\) 求出所有 \(L^{\uparrow}_\ast\)\(L^{\downarrow}_\ast\),其中 \(O(\log n)\) 为求 \(\operatorname{lca}\) 的时间复杂度

\(L_u=\max(L^{\uparrow}_u,L^{\downarrow}_u)\),则若存在一个 \(L_u>k\),答案一定为 \(0\)

然后考虑绕路的影响

对于一条路径 \(s\to t\)

对于 \((s\to l)\) 中某一点 \(p\),设其在路径 \(s\to l\) 中上一个点为 \(u\),则 \(u\)\(p\) 的某个儿子

假定 \(p\) 有两个儿子(否则忽略这个 \(p\)),其另一个儿子为 \(v\)

若最终方案中 \(dfn_u<dfn_v\),从 \(s\)\(t\) 的过程中必然会经过子树 \(v\) 中所有点和边(包含边 \(v-p\)),即对于每个 \(x\in subtree(v)\)\(L^{\uparrow}_x\)\(L^{\downarrow}_x\) 都加一,等价于 \(L_x\) 加一

\(c^{\uparrow}_u\) 表示若 \(dfn_u<dfn_v\),子树 \(v\)\(L_\ast\) 的增加量,其中 \(v\)\(u\) 的兄弟(若不存在,则 \(c^{\uparrow}_u=0\)

\(s\ne l\),令 \(pr\)\(s\to l\)\(l\) 之前的点,则该路径会令 \([s\to pr)\)\(c^{\uparrow}_\ast\) 加一

类似地定义 \(c^{\downarrow}_u\),表示若 \(dfn_u>dfn_v\)(与 \(c^{\uparrow}_u\) 相比仅有此处 符号不同),子树 \(v\)\(L_\ast\) 的增加量,其中 \(v\)\(u\) 的兄弟(若不存在,则 \(c^{\downarrow}_u=0\)

此时若 \(t\ne l\),令 \(sf\)\(l\to t\)\(l\) 下一个点,该路径会使 \([t\to sf)\)\(c^{\downarrow}_\ast\) 加一

两者同样使用树上差分求出

预处理的总时间复杂度为 \(O(m\log n+n)\)

接下来为 \(dp\)

\(dp_{i,j}\) 表示子树 \(i\) 中,令子树中点的 \(L_\ast\) 的最大值为 \(j\) 的方案数,则最终答案为 \(\sum_{0\le j\le k} dp_{1,j}\)

对于叶子节点 \(i\),显然 \(dp_{i,L_i}=1\),其余为 \(0\)

对于只有一个儿子 \(u\) 的节点 \(i\),显然只要考虑 \(i\to fa_i\) 的影响即可,对于所有 \(0\le j\le k\),令 \(f_{i,\max(j,L_i)}\gets f_{u,j}\)

对于有两个儿子 \(u,v\) 的节点 \(i\),计算 \(dfn_u<dfn_v\) 的情况(大于的情况交换两者即可,注意判断是否满足之前的限制),转移为

\[\large f_{i,\max(L_i,j+c^{\downarrow}_v,l+c^{\uparrow}_u)}\gets f_{u,j} f_{v,l} \]

暴力实现为 \(O(nk^2)\) 的,无法承受

分别考虑 \(j+c^{\downarrow}_v\le l+c^{\uparrow}_u\)\(j+c^{\downarrow}_v> l+c^{\uparrow}_u\) 的情况,分别前缀和优化即可到 \(O(nk)\)

总时间复杂度 \(O(nk+m\log n)\)

代码

参考

posted @ 2025-02-04 09:37  Hstry  阅读(10)  评论(0)    收藏  举报