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$需要特判,中間只訪問除父鏈和子鏈。
所以用一個倍增數組維護鏈上的最值,端點特判就可以了。