微积分,多项式,概率期望。
GYM102155B Short Random Problem
题意
给你一颗 n(n≤80) 个点的树,树上的每一条边的长度都是 [1,n] 的随机实数。 求直径的期望长度,对 109+7 取模。
题解
总的思路:枚举一条边 (u,v) 计算直径中心在其上的贡献,即 直径中心在该边上的概率 乘 直径长度期望。
设 fu(x)=Pr[d(u)≤x],即表示 u 到子树中最长链长度小于 x 的概率,这是可以用多项式表示的,而且是一个连续的分段函数,以整数为分段界限。
-
考虑加上一条边:f(x)=∫x−1xg(y)dy 。
-
考虑多条链中取最大:f(x)=∏fi(x)。
因为 Pr[max(a,b)≤x]=Pr[a≤x]×Pr[b≤x]
考虑 DP 出 fu(x),对于叶子节点显然 f(x)=1。对于任意节点先取最长链再加一条边,形式化地:
gu(x)=v∈son(u)∏fv(x)
fu(x)=∫x−1xgu(y)dy
具体实现:
考虑到 gu(x) 是分段函数,设 hi(x) 是 gu(x) 第 i 个函数的积分函数,包含区间 (i−1,i]。对于一个 x∈R,设 y=⌊x⌋,则
fu(x)=hy(x)−hy(y)+hy−1(y−1)−hy−1(x−1)
对于每个属于不同区间的 fu(x) 分开来计算,然后特判最后一个新加的区间即可,知道了 fu(x) 的计算过程, f(x) 是分段函数 也就不证自明了。
考虑通过 f(x) 求我们要的期望。事先约定,考虑边 (u,v) 时,以下 fu(x) 都以 v 为根,同理 fv(x) 都以 u 为根。
若 u,v 之一为叶子节点,不妨设 v 为叶子节点。设 (u,v) 边权为 l,u 到子树最长链长度为 d(u),若要直径中心在 (u,v) 上需要 d(u)≤l,即 fu(l) ,直径长度的期望即 E[d(u)+l] ,根据期望线性性可以分别求。
E[l]=∫01lfu(l)dl(1)
相当于枚举 l,并对应满足 d(u)≤l 。
E[d(u)]=∫01(∫0lxfu′(x)dx)dl(2)
看括号里面,fu′(x) 即 Pr[d(u)=x] ,表最长链长度为 x 的概率,再 ×x 即期望,则 ∫0lxfu′(x)dx 表示 d(u) 小于等于具体枚举的 l 时 d(u) 的期望。 外边一层积分枚举 l。
证明 fu′(x)=Pr[d(u)=x]:
先考虑另一个问题,让你求 d(u)=x 且 x∈[l,r] 的平均概率,显然是 r−lfu(r)−fu(l) ,此时考虑 r 无限逼近 l,即
r→llimr−lfu(r)−fu(l)=Δx→0limΔxfu(l+Δx)−fu(l)=fu′(l)
证毕。
若是一般情况,不妨令 d(u)≤d(v),显然需要满足 d(u)≤d(v)≤d(u)+l,同样 E[d(u)+d(v)+l] 可以根据期望线性性:
E[l]=∫01l(∫0M(u)fu′(x)(fv(x+l)−fv(x))dx)dl(3)
枚举 l (M(u) 表 d(u) 能取到的最大值),大括号里面对应 l 取该值满足 l≥d(v)−d(u) 对应的概率,自然枚举 d(u) 的取值 x,其概率为 fu′(x),乘上 d(v)∈[d(u),d(u)+l] 的概率即 fv(x+l)−fv(x)。
E[d(u)]=∫0M(u)xfu′(x)(∫xx+1fv′(y)(x−y+1)dy)dx(4)
枚举 d(u) 的取值 x,乘上取该值的概率 fu′(x),大括号里面表满足 d(u)≤d(v)≤d(u)+l 的概率。枚举 d(v) 的取值 y(y∈[x,x+1]) 乘上 d(v) 取该值的概率 fv′(y) ,再乘上 l≥y−x 的概率 x−y+1 。
E[d(v)]=∫0M(v)yfv′(y)(∫y−1yfu′(x)(x−y+1)dx)dy(5)
同上。
考虑一下以上这坨东西怎么求。(1),(2) 直接积分就完事了。
对于 (4),(5),以 (4) 为例:
E[d(u)]=∫0M(u)xfu′(x)(∫xx+1fv′(y)(x−y+1)dy)dx=∫0M(u)xfu′(x)(x∫xx+1fv′(y)dy+∫xx+1fv′(y)(−y+1)dy)dx
对于 (3):
E[l]E[l]E[l]=∫01l(∫0M(u)fu′(x)(fv(x+l)−fv(x))dx)dl=∫0M(u)fu′(x)∫01l(fv(x+l)−fv(x))dldx=∫0M(u)fu′(x)(∫01lfv(x+l)dl−fv(x)∫01ldl)dx
fv(x)∫01ldl=21fv(x) ,考虑 ∫01lfv(x+l)dl ,令 y=x+l:
==∫01lfv(x+l)dl∫xx+1(y−x)fv(y)dy∫xx+1yfv(y)dy−x∫xx+1fv(y)dy
那完事了。
题目 n≤80,不用担心卡常,建议封装。
注:积分的基本运算法则(k 为常数,原函数可积)
∫abkf(x)dx=k∫abf(x)dx
∫ab(f(x)±g(x))dx=∫abf(x)dx±∫abg(x)dx
交换求积顺序显然是可以的,跟交换求和顺序差不多。