bzoj#P2840. 小强的逃跑

小强的逃跑

题目描述

小强建立了一个洞穴,洞穴由 NN 个点、MM 条有向边组成,可能有自环、重边。每个边有一个体力消耗值。当小强感觉到危险的时候,它会进行低智商的逃跑行为,具体说,是从一个点开始跑,每一步:它有 PP 的概率从这个点钻出洞穴终止逃跑;1P1-P 的概率沿着从当前点连出的体力消耗值最小的边移动到另一个点(此时,如果有多个连出的边的消耗值一样且都是最小的,小强会选择到达的点的编号比较小的边。如果当前点没有连出的边,它会以相等的概率穿越到一个随机的点,穿越不用体力,具体请见样例解释)。小强想知道,从一个点开始逃跑直到终止,它消耗的体力的期望是多少?还有,洞穴是在动态变化的。每次,某条边的权值可能由原来的数变成另一个数。你要不停地接受修改,同时回答小强的询问。

输入格式

第一行有三个数:两个正整数 N,MN,M,表示点的个数和边的个数,还有一个实数 PP,表示小强终止逃跑的概率。接下来 MM 行,每行三个正整数 a,b,ca,b,c,表示从点 aa 到点 bb 有一条权值为 cc 的有向边。点从 11 编号到 NN。接下来一个非负整数 QQ,表示操作的个数。接下来 QQ 行,每行一个操作,是下面的格式之一:0 x y 表示把输入文件中输入的第 xx 条边的权值变成 yy1,x 表示查询当前状态下,从点 xx 开始逃跑,小强消耗的体力的期望是多少。

输出格式

对于输入的每个询问操作,输出一行一个数表示小强从某个点开始逃跑的体力消耗的期望。四舍五入到整数。

3 3 0.1
1 2 1
1 3 1
3 1 1
4
1 1
0 1 2
1 1
1 2
5
9
8

样例说明

这张图开始的时候有 33 个点,33 条边。

在开始状态下:

如果小强在点 11,它会以 0.90.9 的概率跑向点 22(消耗体力值 11),0.10.1 的概率停止;

如果小强在点 22,这个点没有连出的边,所以它会以0.30.3 的概率穿越到点 110.30.3 的概率穿越到点22(也就是不动),0.30.3 的概率穿越到点 330.10.1 的概率停止;

如果小强在点 33,它会以 0.90.9 的概率跑向点1(消耗体力值 11),0.10.1 的概率停止。

为了计算这种情况下小强从点 11 出发的体力消耗期望,我们设 x,y,zx,y,z 分别表示小强从点 1,2,31,2,3 出发的体力消耗值,那么有:

x=0.9×(y+1)x=0.9\times(y+1)

y=0.3x+0.3y+0.3zy=0.3x+0.3y+0.3z

z=0.9times(x+1)z=0.9times(x+1)

解这个方程得到 $x=\frac{873}{187},y=\frac{783}{187},z=\frac{954}{187}$。所以,从点 11 出发的体力消耗的期望是 4.66844924.6684492,四舍五入之后就是 55

后来,从点 11 到点 22 的边的体力值变成了 22。这样,小强从点 11 出发,它就会以 0.90.9 的概率跑向点 330.10.1 的概率停止。此时方程变成:

x=0.9×(z+1)x=0.9\times(z+1)

y=0.3x+0.3y+0.3zy=0.3x+0.3y+0.3z

z=0.9×(x+1)z=0.9\times(x+1)

这个方程的解是 x=z=9,y=547x=z=9,y=\frac{54}{7}。所以,从点 11 出发的体力消耗的期望是 99,从点 22 出发的体力消耗的期望是 7.71428571427.7142857142,四舍五入之后就是 88

数据规模与约定

对于 100%100\% 的数据,N50000,Q100000,1M1000000N\le50000,Q\le100000,1\le M\le1000000,每条边的体力消耗值为介于 1110001000 的一个正整数。