洛谷 P6835 [Cnoi2020]线形生物(数学+期望DP)

来源:洛谷 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 )
于是这道题便做出来了。
顺带一提,在由于 fsum 中存的是取模后的值,所以可能出现后面的比前面的小的情况,导致出现数组中存在负数,最终使你得到一个大大的 WA (我就被这个坑了),所以在取模之前要先 +MOD 。

出题人日常夹带私货(
代码<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值