P6773 [NOI2020] 命运
题目
给定结点个数为 \(n\) 的一棵树和 \(m\) 个祖先关系点对,每条边可染成黑白的,每个给定点对之间路径至少存在一条边为黑色,求合法染色方案数。
分析
对于至少容易想到容斥,这里采用经典的集合的交等价于全集减去集合补的并,因此答案转化为:
\[\sum_{S}(-1)^{|S|}2^{n-1-|\bigcap_{p\in S} p|}
\]
直接枚举显然超时,此处容斥的容斥系数仅为 \((-1)^{|S|}\),可以在动态规划转移过程中解决,且路径并的贡献是可拆分的,因此考虑动态规划。
记 \(f_{u,i}\) 为 \(u\) 子树内,所取的点对最高顶点的深度为 \(j\) 的容斥数量。
转移有:
- 合并当前结点 \(u\) 与儿子 \(v\)。
\[f_{u,\min(i,j)}\leftarrow f_{u,i}\times f_{v,j}
\]
- 添加一条点对,记 \(D\) 为顶点深度。
\[f_{u,i}\leftarrow -\sum_{\min(j,D)=i} f_{u,j}
\]
观察该式,发现本质上是三个转移式,即:
\[\begin{equation}
\begin{cases}
f_{u,i}=0,(i<D) \\
f_{u,i}=-\sum_{j=i+1}^n f_{u,j},(i=D) \\
f_{u,i}=f_{u,i},(i>D)
\end{cases}
\end{equation}\]
优化考虑线段树合并(因为第二维是由点对增加的,且信息可快速合并)。
第二种转移是容易的,只需区间赋值,区间求和即可,考虑第一种转移,将转移式更具体写出即为:
\[f_{u,i}\leftarrow f_{u,i}\times \sum_{j=i+1}^n f_{v,j}+f_{v,i}\times \sum_{j=i+1}^n f_{u,i}
\]
这个式子和PKUSC2018 MINMAX一样的,当存在单个结点时直接区间乘即可。
总复杂度 \(O((n+m)\log n)\)。
代码

浙公网安备 33010602011771号