模拟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$需要特判,中间只访问除父链和子链。

所以用一个倍增数组维护链上的最值,端点特判就可以了。

posted @ 2019-10-18 18:16  skyh  阅读(207)  评论(12编辑  收藏  举报