题目描述
给出一棵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


被折叠的 条评论
为什么被折叠?



