考虑 DP,设 fu,i 表示确定了以 u 为根的子树内的所有边的状态,对于所有 vj 在该子树内且没有被满足的 j,depuj 的最大值为 i 的方案数。 特别地,i=0 表示全都满足的方案数。
之所以记最大值是因为实际上只关心最大值,深的满足了之后浅的会同时满足。
对于 u 及其儿子 v,不难合并其状态 f′u,i=depu∑j=0fu,ifv,j+i∑j=0fu,ifv,j+i−1∑j=0fu,jfv,i
第一项表示把 u 到 v 的边标记为重要的,后两项表示标记为不重要的。
不难发现这个 DP 适合用线段树合并来维护。
直接上即可。
代码:
1 |
|