「题解」洛谷 P6773 [NOI2020] 命运(线段树合并优化 DP)

记一个 条件 为 \((u,v)∈\mathcal{Q}\)

一个重要观察:对于以 \(u\) 为底的所有条件,若深度深的能满足,深度更浅也能满足。

DP,设 \(f_{u,i}\) 表示对 \(u\) 的子树内的边染色(其余边为 \(0\)),对于所有底在 \(u\) 子树内的条件,不能被满足的深度最深的询问,深度为 \(i\) 的方案数。

\(d_u\)\(u\) 的深度,考虑 \(u\) 的一个子节点 \(v\)

\[f'_{u,i}=\sum_{j=0}^{d_u}{f_{v,j}f_{u,i}}+(\sum_{j=0}^{i}f_{v,j}f_{u,i}+\sum_{j=0}^{i-1}f_{v,i}f_{u,j}) \]

\(s_{u,i}=\sum_{j<i}f_{u,j}\)

\[f'_{u,i}=f_{u,i}(s_{v,d_u}+s_{v,i})+f_{v,i}s_{u,i-1} \]

线段树合并即可。

具体的,由于只需要乘法标记,因而一个不存在的点,其 \(f\) 值一定为 \(0\)


代码时注意,可并线段树中 \(u\) 的左右儿子不是 u << 1, u << 1 | 1

posted @ 2023-05-02 11:03  Network_Error  阅读(14)  评论(0)    收藏  举报