EagleBear2002 的博客

这里必须根绝一切犹豫,这里任何怯懦都无济于事

P5298 [PKUWC2018] Minimax

题目描述

C 有一棵 n 个结点的有根树,根是 1 号结点,且每个结点最多有两个子结点。

定义结点 x 的权值为:

1.若 x 没有子结点,那么它的权值会在输入里给出,保证这类点中每个结点的权值互不相同

2.若 x 有子结点,那么它的权值有 px 的概率是它的子结点的权值的最大值,有 1px 的概率是它的子结点的权值的最小值。

现在小 C 想知道,假设 1 号结点的权值有 m 种可能性,权值第 i的可能性的权值是 Vi,它的概率为 Di(Di>0),求:

i=1miViDi2

你需要输出答案对 998244353 取模的值。

输入格式

第一行一个正整数 n

第二行 n 个整数,第 i 个整数表示第 i 个结点的父亲的编号,其中第 1 个结点的父亲为 0

第三行 n 个整数,若第 i 个结点没有子结点,则第 i 个数为它的权值,否则第 i 个数为 pi10000,保证 pi10000 是个正整数。

输出格式

输出答案。

输入输出样例 #1

输入 #1

1
2
3
3
0 1 1
5000 1 2

输出 #1

1
748683266

说明/提示

样例解释

1 号结点的权值有 12 的概率是 1,有 12 的概率是 2,所以答案是 54

数据范围

  • 对于 10% 的数据,有 1n20
  • 对于 20% 的数据,有 1n400
  • 对于 40% 的数据,有 1n5000
  • 对于 60% 的数据,有 1n105
  • 另有 10% 的数据保证树的形态随机;
  • 对于 100% 的数据,有 1n3×1051wi109

对于所有数据,满足 0<pi10000<10000,所以易证明所有叶子的权值都有概率被根取到。

题解

我们设 f(i,j)i 节点出现 j 的概率。

li,ri 是节点 i 的两个子节点, m 为叶子结点的个数。

显然,i 出现 j 的概率为

f(i,j)=f(l,j)(pik=1j1f(r,k)+(1pi)k=j+1mf(r,k))+f(r,j)(pik=1j1f(l,k)+(1pi)k=j+1mf(l,k))

这个式子有关前缀和和后缀和,可以很容易用线段树合并的操作来进行转移。