题目链接:Problem - 1823F - Codeforces

Statement

给定一棵 nn 个节点的树,求从节点 SS 到 TT 过程中经过每个点次数的期望值,答案对 998244353998244353 取值,n≤106n \le 10^6​。

Solution

定义 fif_i 表示经过点 ii 的期望次数,根据随机游走的套路,我们可以得出如下关系:

fi={∑(i,j)∈E,j≠Tfjdeg⁡j+[i=S],i≠T1,i=Tf_i = \begin{cases} \sum\limits_{\substack{(i, j) \in E, j \neq T}} \frac{f_j}{\deg_j} + [i = S] , & i \neq T \\[10pt] 1, & i = T \end{cases}

很好解释的状态转移,一旦走到 TT 就结束,因此 fT=1f_T = 1,剩余的过程中由于 SS 为起点,初始就有一次。

显然这是一个环型 dp 问题,直接暴力高斯消元求解是 O(n3)\mathcal{O}(n^3) 的,我们应当从树上找到一些性质。不难发现 fif_i 是由 ffaif_{fa_i} 和 fj,j∈sonif_{j, j \in son_i} 转移而来的,而 faifa_i 唯一,因此我们钦定:

fi←Ai×ffai+Bif_i \gets A_i \times f_{fa_i} + B_i

将前面的式子转化后得到:

fi=1deg⁡faiffai+[i=s]+∑j∈soni1deg⁡j(Aj×fi+Bj)(1−∑j∈soni1deg⁡jAj)fi=∑j∈soni1deg⁡jBj+[i=s]+1deg⁡faiffai\begin{aligned} f_i &= \frac{1}{\deg_{fa_i}}f_{fa_i} + [i = s] + \sum_{j \in son_i} \frac{1}{\deg_j} (A_j \times f_i + B_j) \\ \left (1 - \sum_{j \in son_i} \frac{1}{\deg_j}A_j \right) f_i &= \sum_{j \in son_i} \frac{1}{\deg_j}B_j + [i = s]+ \frac{1}{\deg_{fa_i}} f_{fa_i} \end{aligned}

显然 Ai,BiA_i, B_i 可以推出来:

Ai=1deg⁡fai×1(1−∑j∈soni1deg⁡jAj)Bi=(∑j∈soni1deg⁡jBj+[i=s])×1(1−∑j∈soni1deg⁡jAj)A_i = \frac{1}{\deg_{fa_i}} \times \frac{1}{\left ( 1 - \sum\limits_{j \in son_i} \frac{1}{\deg_j} A_j \right)} \\ B_i = \left( \sum\limits_{j \in son_i} \frac{1}{\deg_j}B_j + [i = s] \right) \times \frac{1}{\left ( 1 - \sum\limits_{j \in son_i} \frac{1}{\deg_j} A_j \right)} \\

由此看出 AiA_i 依赖 Aj,j∈soniA_{j, j \in son_i},BiB_i 依赖 Bj,j∈soniB_{j, j \in son_i} 和 Aj,j∈soniA_{j, j \in son_i},考虑先自下而上 dfs 一遍整棵树,求出 AA 和 BB 数组,接着再 dfs 一次,从上往下求出所有的 fif_i 值。

注意到以上式子在 i=Ti = T 时不成立,我们可以直接将 TT 当作根,从而省略一些特判。

Code

Submission #306832214 - Codeforces