来源:洛谷 P6835 [Cnoi2020]线形生物
题目
线形生物要从 1 号台阶走到 n+1 号台阶。
最开始,1,2,3,…,n 号台阶都有一条连向下一台阶的有向边 i→i+1。
之后 Cirno 加入了 m 条返祖边 ui→vi(ui≥vi),它们构成了一个返祖图。
线形生物每步会 等概率地 选取当前台阶的一条出边并走向对应的台阶。
当走到 n+1 号台阶时,线形生物就会停止行走。
同时,Cirno 会统计线性生物总共走的步数,记作 δ。
Cirno 想知道 E(δ)(即 δ 的数学期望)对 998244353 取模后的结果。
输入格式
第一行三个整数 id,n,m。
以下 m 行,每行两个整数 ui,vi。
id 表示 subtask 编号,其它字母含义同上文。
输出格式
一行,一个整数 E(δ),字母含义同上文。
输入 #1
1 5 5
1 1
2 2
3 3
4 4
5 5
输出 #1
10
输入 #2
2 5 5
1 1
2 1
3 2
4 3
5 4
输出 #2
30
输入 #3
3 5 5
1 1
2 1
3 1
4 1
5 1
输出 #3
62
输入 #4
4 5 5
1 1
3 1
4 2
5 1
5 5
输出 #4
35
说明/提示
id∈{1,2,3,4,5}
0 < n , m ≤ 106
1 ≤ vi ≤ ui ≤ n
题解
思路
令人头疼的数学题,推柿子是不可能推出来的,这辈子都不可能推出来 。
本题可以看作是在一张图上随机游走,又由于此图的主路线为一条链,所以我们可以设 fx 为从点 x 到点 x+1 的期望步数。
dx 表示 x 点的返祖边数量, Ex 表示 x 点的返祖边集,那么我们可以推出以下式子:
fx = 1 / ( dx + 1 ) + ∑(x,y)∈Ex [ ( ∑i:y–>x fi ) + 1 ] / ( dx + 1 )
设 sumx = ∑i:1–>x fi ,则:
fx = 1 + ∑(x,y)∈Ex (sumx - sumy-1 ) / ( dx + 1 )
由于 sumx = sumx-1 + fx ,所以可进一步化简:
fx = dx + 1 + ∑(x,y)∈Ex (sumx-1 - sumy-1 )
于是这道题便做出来了。
顺带一提,在由于 f 和 sum 中存的是取模后的值,所以可能出现后面的比前面的小的情况,导致出现数组中存在负数,最终使你得到一个大大的 WA (我就被这个坑了),所以在取模之前要先 +MOD 。