不太了解这个东西的具体定义是什么,总之应该是一个用数据结构维护 DP 状态的某几个维度的 trick 吧。
事实上你可以把这篇 post 理解为三个题的解集。
先直接来看 noi2020 - Destiny 这个题。
给定一棵树 T = ( V , E ) T = (V, E) T=(V,E) 和点对集合 Q ⊆ V × V \mathcal Q \subseteq V \times V Q⊆V×V ,满足对于所有 ( u , v ) ∈ Q (u, v) \in \mathcal Q (u,v)∈Q,都有 u ≠ v u \neq v u=v,并且 u u u 是 v v v 在树 T T T 上的祖先。其中 V V V 和 E E E 分别代表树 T T T 的结点集和边集。求有多少个不同的函数 f f f : E → { 0 , 1 } E \to \{0, 1\} E→{ 0,1}(将每条边 e ∈ E e \in E e∈E 的 f ( e ) f(e) f(e) 值置为 0 0 0 或 1 1 1),满足对于任何 ( u , v ) ∈ Q (u, v) \in \mathcal Q (u,v)∈Q,都存在 u u u 到 v v v 路径上的一条边 e e e 使得 f ( e ) = 1 f(e) = 1 f(e)=1。由于答案可能非常大,你只需要输出结果对 998 , 244 , 353 998,244,353 998,244,353(一个素数)取模的结果。
我们略过 DP 的过程,直接给出其定义 f ( x , j ) f(x,j) f(x,j) 表示考虑子树 i i i,限制条件的 v ∈ s u b t r e e ( x ) v\in{\rm subtree}(x) v∈subtree(x) 且限制 ( u , v ) (u,v) (u,v) 尚未被满足, u u u 的深度最深且 j = d e p ( u ) j={\rm dep}(u) j=dep(u) 的不同映射 f : E s u b t r e e ( x ) → { 0 , 1 } f:E_{ {\rm subtree}(x)}\rightarrow\{0,1\}