#P1926. Pollution

Pollution

题目描述 一家以高污染闻名的化工厂计划采用一种新开发的设备来减少污染物排放。然而,工厂的工程师们对此计划持反对态度,因为他们怀疑该设备的有效性。由于工程师只相信实验结果,经理们决定聘请程序员进行数值实验以说服工程师。

新的污染控制设备由多个通过管道连接的储罐组成。假设两个储罐之间最多有一条管道,若两个储罐通过管道相连,则称为相邻。当设备运行时,污染物会在储罐之间循环流动。

如图 1 所示,在时间 tt 时,储罐i i 中的污染物会在时间 t+1t+1 时均匀分配到所有相邻的储罐中。具体来说,若用 X i t ​

表示时间 tt 时储罐 ii 中的污染物量,则状态转移公式为: $X i t+1 ​ =∑ j=1 N ​

d j ​

I ij ​ ⋅X j t$ ​

其中, Iij=1I ij ​ =1 表示储罐 iij j 相邻,否则为 0; djd j ​

是储罐 jj 的相邻储罐数量(度数)。若储罐 i 没有相邻储罐,则 Xit+1=XitX i t+1 ​ =X i t

现在需要计算:给定每个储罐的初始污染物量,经过长时间循环后,污染物在各储罐中的分布情况(即当 $X i t ​

和 X i t+1$ ​

的差异可忽略不计时的结果)。题目保证对于任意初始情况,该条件最终会达成。 输入 第一行包含测试用例数 T1T10T(1 ≤ T ≤ 10)。 每个测试用例的第一行包含两个整数 NNM1N1000MN(N1)/2 M(1 ≤ N ≤ 100,0 ≤ M ≤ N*(N-1)/2),分别表示储罐数和管道数。 接下来 NN 行,每行一个非负实数100(≤100),表示各储罐的初始污染物量。 最后 MM 行,每行给出两个整数 AAB1A,BNAB B(1 ≤ A, B ≤ N,A≠B),表示连接储罐 A 和 B 的管道。 输出 对每个测试用例,输出最终各储罐的污染物量(每行一个数,保留三位小数),测试用例之间用空行分隔。 输入输出示例 输入数据 1:

plaintext 2
3 3
1
0
0
1 2
2 3
3 1
4 4
1
0
0
1
1 2
2 3
3 1
3 4

输出数据 1:

plaintext 0.333
0.333
0.333

0.500
0.500
0.750
0.250

解释:

第一个测试用例中,三个储罐两两相连(形成三角形),初始时只有第一个储罐有污染物。最终三个储罐的污染物量相等,均为 1/3 ≈ 0.333。 第二个测试用例中,储罐 1、2、3 形成三角形,储罐 3 连接储罐 4。最终污染物在各储罐中的分布通过状态转移方程迭代收敛得到