Luogu P6773 [NOI2020] 命运 题解

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

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

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

d u d_u du u u u 的深度,考虑 u u u 的一个子节点 v v v

f u , i ′ = ∑ j = 0 d u f v , j f u , i + ( ∑ j = 0 i f v , j f u , i + ∑ j = 0 i − 1 f v , i f u , j ) 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}) fu,i=j=0dufv,jfu,i+(j=0ifv,jfu,i+j=0i1fv,ifu,j)

s u , i = ∑ j < i f u , j s_{u,i}=\sum_{j<i}f_{u,j} su,i=j<ifu,j

f u , i ′ = f u , i ( s v , d u + s v , i ) + f v , i s u , i − 1 f'_{u,i}=f_{u,i}(s_{v,d_u}+s_{v,i})+f_{v,i}s_{u,i-1} fu,i=fu,i(sv,du+sv,i)+fv,isu,i1

线段树合并即可。

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


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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值