蚊子

描述

作为一只明媚的兔子,要会叠被子,又得会打蚊子……

兔子住在兔子洞里。兔子洞可以看成是一棵无根树,有 n 个洞穴,有 n1 条通道连接着 n 个洞穴。每天晚上,兔子会在 1 号洞穴里缩成一团,睡一觉。同时,蚊子大军出动,去欺负兔子。

因为蚊子人多势众,所以它们分兵 m×(m1) 路。m 是整个兔子洞中只和一条通道相邻的洞穴数目。任意两个这样的洞穴 a,b 之间(也就是任意两个叶子节点之间)会有两只蚊子,一只从 a 飞到 b,一只从 b 飞到 a。它们都沿着 ab 的最短路径移动。蚊子每秒钟可以通过一条通道。所有蚊子都在 0s 时突然出现在起点并开始移动。每只蚊子在到达终点后的一瞬间都会突然消失。有些蚊子并不会经过兔子所在的 1 号节点,它们起到的是恐吓作用。

又一次满脸是包地醒来后,兔子忍无可忍了,于是它找到 lrd,让 lrd 去打蚊子……lrd 不知所措,于是去某宝搞了一个灭蚊器……这个灭蚊器被放在 1 号节点。每个时刻,它都会工作一次,把和灭蚊器距离小于等于 d 范围内的蚊子全部杀死。(d=0 时只能控制 1 号点一个位置)

遗憾的是,兔子洞尚未通电,兔子只能用爱发电。 因此,每个时刻灭蚊器只有 pq 的概率能够正常工作。如果不能正常工作,那么蚊子将不受到任何影响。

灭蚊器无法影响出现之前和消失之后的蚊子。但在蚊子出现在起点和消失在终点的 那个时刻,如果灭蚊器正常工作且蚊子在作用范围内,这只蚊子仍会被杀死。

兔子对 lrd 的诚意表示怀疑……于是它让 lrd 算出灭蚊器在一晚上期望能杀死多少蚊子。lrd 当然会算了,但是他想考考你。因为兔子讨厌小数,你需要输出这个期望值模 109+7 后的结果。即:表示为分子乘分母的逆元(对 109+7 取模)。 (如果你算错了,就会被 lrd 拿去喂兔子,啊呜~~)

格式

输入

第一行一个整数 n,表示兔子洞中洞穴的个数。洞穴编号为 1n 的整数。 接下来 n1 行,每行两个整数 u,v,表示 uv 两个洞穴之间有一条通道。 接下来一行三个整数 d,p,q,表示灭蚊器的作用范围是 d,每个时刻工作的概率是 pq

输出

一行一个整数,你的答案。

样例

输入

输出

范围

编号分值特殊性质
115d=0
225p=q
360

对于所有测试点:

m<n5000000,0dn,1pq109+7

本文参考了 这篇题解 的思路,有不少补充。本文的代码与那篇题解的代码有不少相似之处,有不少细节改动。

解析

树形 DP 以及树上路径的好题。这个题目的部分分很有帮助价值。

先考虑 d=0 的情况,即只有根节点被灭蚊器控制。记 cntx 表示以 x 为根的子树的叶节点数量。令

sum=ison1cnti

soni 表示 i 的子节点的集合。答案就是

ison1cnti×(sumcnti)

相当于,把根作为 LCA 折点,对于每一棵子树,都贡献了这棵子树叶子个数与非这棵子树叶子个数的乘积,相当于乘法原理的匹配。至于蚊子双向活动的问题,i 刷过一遍,每个叶子会在 (sumcnti) 中刷到,也会在 cnti 中刷到。乘上灭蚊器消杀概率即可。

再考虑满分做法。记录动态规划数组 ffi 表示所有蚊子在以 i 为根的子树里存活期望。同样的,令 w 为灭蚊器消杀概率:

sum=vsonufv
tot=vsonucntv

u 为根的子树的贡献是:

vsonucntv×(totcntv)fv×w×(sumfv)

还有一些细节。比如,题目中的分数取模,相当于乘上分母的逆元。灭蚊器消杀概率为 pq,留蚊子活路的概率是

1pq=qpq

可以全开 long long。

代码


All Rights Reserved 2022 Wang Zhanrui