首先第一次卡的点在到根路径能否拆到每条边上,因为我忘记了期望的可加性是否要满足各个部分独立了,后面手推了一下,发现没问题。然后问题就转成了问每条边是重边的概率,考虑设状态 F_{u,i} 表示在 u 的子树里面,重链长度为 i 的概率,这个东西的转移是 F_{u,i}=\sum_v F_{v,i-1}\sum_k \frac{i-1}{i-1+k}G_{v,k},其中 G_{v,k}代表 v 的兄弟重链长度和为 k 的概率。我一开始误以为直接求 F 是 O(n^3),而求 G 是 O(n^2) 的(后面发现两个反了),然后就糟糕了,我一直在想 F 这个式子怎么优化,想了好久,决定破罐子破摔打 n^3 了,然后打到一半,发现求 G 也是 n^3,而且更难优化,然后我就只能硬着头皮打下去了。不知道为啥这东西这么难调,调了好久,打完的时候已经没时间了。发现自己最后的一个大样例跑了0.6s,因为加了很多卡常剪枝,不知道能拿多少。