题目链接:Problem - 1823F - Codeforces
Statement
给定一棵 n 个节点的树,求从节点 S 到 T 过程中经过每个点次数的期望值,答案对 998244353 取值,n≤106。
Solution
定义 fi 表示经过点 i 的期望次数,根据随机游走的套路,我们可以得出如下关系:
fi=⎩⎨⎧(i,j)∈E,j=T∑degjfj+[i=S],1,i=Ti=T
很好解释的状态转移,一旦走到 T 就结束,因此 fT=1,剩余的过程中由于 S 为起点,初始就有一次。
显然这是一个环型 dp 问题,直接暴力高斯消元求解是 O(n3) 的,我们应当从树上找到一些性质。不难发现 fi 是由 ffai 和 fj,j∈soni 转移而来的,而 fai 唯一,因此我们钦定:
fi←Ai×ffai+Bi
将前面的式子转化后得到:
fi(1−j∈soni∑degj1Aj)fi=degfai1ffai+[i=s]+j∈soni∑degj1(Aj×fi+Bj)=j∈soni∑degj1Bj+[i=s]+degfai1ffai
显然 Ai,Bi 可以推出来:
Ai=degfai1×(1−j∈soni∑degj1Aj)1Bi=(j∈soni∑degj1Bj+[i=s])×(1−j∈soni∑degj1Aj)1
由此看出 Ai 依赖 Aj,j∈soni,Bi 依赖 Bj,j∈soni 和 Aj,j∈soni,考虑先自下而上 dfs 一遍整棵树,求出 A 和 B 数组,接着再 dfs 一次,从上往下求出所有的 fi 值。
注意到以上式子在 i=T 时不成立,我们可以直接将 T 当作根,从而省略一些特判。
Code
Submission #306832214 - Codeforces