期望与概率DP染色(color)
WZH 染色(color)
有 n 个点的一棵树,一开始所有节点颜色为 0。
有 m 次操作,第 i 次操作会在 [0,di] 中均匀随机选择一个数 r,并将距离 xi 不超过 r 的所有节点颜色染色为 i 。
求树上同色连通块数量期望。
n,m≤2000 。
先对答案做有转化:
E[同色连通块个数]=1+E[e(u,v)∑[cu=cv]]=1+e(u,v)∑E[[cu=cv]]=1+e(u,v)∑Pr[[cu=cv]]
因此,我们只需要对于每一条边 e(u,v) ,求出其两端不同色的概率。
依次考虑所有操作,对于操作 i,我们想要更新 pe(u,v) 。
那么对于每一条边 (u,v) ,有如下三种可能:
- u,v 均被覆盖,设概率为 P1。
- u,v 其一被覆盖,设概率为 P2。
- u,v 均未覆盖,设概率为 P3。
可以发现,新的 pe(u,v) 应该是这三种情况的带权和,所以我们要看这三种情况分别的权:
- 此时这一条边被强制覆盖,会产生 0 的贡献,因此这一项为 0×P1=0。
- 此时这一条边一定会有 1 的贡献,因此这一项为 1×P2=P2 。
- 此时这一条边不会产生任何变化,因此这一项为 pe(u,v)×P3 。
于是,我们只需要求出 P1,P2,P3 ,就可以完成更新。
我们当然可以暴力:枚举 r∈[0,di] ,然后直接模拟,从而获得 P1,P2,P3 。复杂度 O(n2m) ,可以获得 50% 的分数。
不过我们有更聪明的方法:设 t=min{dist(xi,u),dist(xi,v)} ,则情况 2 发生当且仅当 r=t ,于是 P2=di+11 ,情况 1,3 同理,分别为 P1=di+1di−t,P3=di+1t 。
于是我们就可以在 O(nm) 的时间内解决此题(并且看起来可以优化到 O(mlogn))。