模拟78 题解
A. 串串香
送分题。
发现用$kmp$复杂度也是$O(n)$,和直接哈希的复杂度是一样的。
所以直接双模哈希硬干就完了。
B. 糊涂图
在不加边的情况下,因为存在拓扑序,问题是简单的。
所以可以先处理出不加边情况下,每个点达哥获胜的概率,其实这个数组也表示走奇数步后无路可走的概率,设为$f_i$。
显然有$f_i=\frac{\sum (1-f[to])}{out_i}$,可以在拓扑序的倒序上简单递推。
考虑当前加边$(i,j)$。
那么可以将达哥获胜的概率拆分为:
1.经过点$i$并且走向$j$获胜的概率,
2.经过点$i$并且不走向$j$获胜的概率,
3.不经过点$i$获胜的概率。
那么当前已经关注从起点走到$i$的概率。
注意这里关注的其实是从起点到$i$走偶数步和奇数步分别的概率,因为达哥和B哥无名氏对应着不同的结果。
设上述两个数组分别为$p0_i$和$p1_i$,均可以在拓扑序的正序上简单递推。
处理出这三个数组,已经可以暴力推答案。
仍然考虑当前加边$(i,j)$
设$h$为达哥的第三部分胜率,有$h=f_s-f_i*p0_i-(1-f_i)*p1_i$
设$F$表示走到$i$之后奇数步后无路可走的概率,有$F=\frac{out_i}{out_i+1}*f_i+\frac{1}{out_i+1}*(1-f_j)$
那么$ans=p0_i*F+p1_i*(1-F)+h$
推一推式子,可以把其中关于$j$的项移出来。
于是枚举$i$就可以统计出平均数和最大值。
C. 木叶下
手玩可以发现一些性质:
当不存在环,答案为树的直径除二向下取整再加一。
当存在环,答案为环上伸出的最长链。
首先预处理出需要的最长链,
然后分类讨论:
在$1$为根的树上$u$,$v$是祖先关系。那么$u$ $v$需要特判,中间只访问除父链和子链。
在$1$为根的树上$u$,$v$的$dfs$序无交集。那么$u$ $v$ $lca$需要特判,中间只访问除父链和子链。
所以用一个倍增数组维护链上的最值,端点特判就可以了。