题目描述
给出一棵
n
个点,边权为
100%:n≤105
分析
这道题显然是用期望的线性性,但是怎么去拆就会有很大的不同。
首先有一个技巧就是一般来说贡献可以写成“期望次数 × 权值”的形式。
部分分
考虑拆成一对有序点对
(x,y)
间路径的期望贡献。
具体来说怎么去算呢?
那么我们这里只关心黑点情况以及当前在不在点
x
处,就可以写出转移了。
记
那么接下来就是考虑这个状态下下一步转移到什么状态,记当前状态为
now
。
- 当
isx=1
- 转移到一个普通点
y
y 是白点,对 now 的贡献为 n−2−bcnfcx,cy,b+1,0-
y
是黑点,对
now 的贡献为 bcnfcx,cy,bc−1,0
- 转移到自己, 1nf!cx,cy,bc,1
- 转移到
y
,
1n(fcx,!cy,bc,0+1)
同理不难写出当 isx=0 时的转移。
对这些方程进行高斯消元就可以了,答案显然就是枚举任意一对有序点对计算贡献。正解
考虑拆成从每个点出发的期望代价乘上到达每个点的期望次数。
只要没结束的情况下,从一个点出发的期望显然就是所有点到它的距离和的平均数。
而与期望次数有关系的,仅仅是当前局面的黑点数量。
然后因为这道题目中高度的对称性,当黑点数量固定的时候,每个黑(白)点的期望经过次数时一样的(它甚至不与这个点是谁有关)。那么这里考虑这样子去设计DP。令 fi,0 表示有 i 个黑点时,黑点的期望经过次数。类似地定义
fi,1 表示白点期望次数。
考虑转移fi,0=n−infi+1,0+i−1nfi−1,0+1n(fi−1,1+1)分别表示到了一个普通白点,一个普通黑点,或者到了它自己,同理写出 fi,1 的转移
fi,1=infi−1,1+n−i−1nfi+1,1+1n(fi+1,0+1)但是注意,假如我们转移到一个终止态时,不要加一。因为它不再走出去了。
由于开始时我们从随机一个点出发,我们需要将每个期望次数都加上 1n注意到这里转移既关于 i−1 ,又关于 i+1 ,裸上高斯消元可以,但是复杂度难以接受,我们需要考虑更好的做法。
首先我们有 f0,0⋯1 以及 fn,0⋯1 都是已知的 0 。
移项,发现fi+1,0 依赖于 fi−1,0⋯1 和 fi,0 。
而 fi+1,1 依赖于 fi+1,0,fi−1,1,fi,1那么考虑将每一个状态都表示成 af1,0+bf1,1+c 的形式。
到 fn−1,∗ 的时候,根据未移项的式子写出二元一次方程组,就可以解出 f1,0⋯1 ,接着递推回来我们就可以得到所有的 f至此,这道题目就做完了,是一道很不错的概率题。
时间复杂度
O(n)
空间复杂度 O(n) - 转移到一个普通点
y