CF960H.Santa's Gift

NOI/NOI+/CTSC

通过率:0%

时间限制:4.00s

内存限制:512MB

AC君温馨提醒

该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

Santa has an infinite number of candies for each of mm flavours. You are given a rooted tree with nn vertices. The root of the tree is the vertex 11. Each vertex contains exactly one candy. The ii-th vertex has a candy of flavour fif_i.

Sometimes Santa fears that candies of flavour kk have melted. He chooses any vertex xx randomly and sends the subtree of xx to the Bakers for a replacement. In a replacement, all the candies with flavour kk are replaced with a new candy of the same flavour. The candies which are not of flavour kk are left unchanged. After the replacement, the tree is restored.

The actual cost of replacing one candy of flavour kk is ckc_k (given for each kk). The Baker keeps the price fixed in order to make calculation simple. Every time when a subtree comes for a replacement, the Baker charges CC, no matter which subtree it is and which flavour it is.

Suppose that for a given flavour kk the probability that Santa chooses a vertex for replacement is same for all the vertices. You need to find out the expected value of error in calculating the cost of replacement of flavour kk. The error in calculating the cost is defined as follows.

ErrorE(k)=(ActualCost–PricechargedbytheBakers)2.Error\\ E(k) =\\ (Actual Cost\\ –\\ Price\\ charged\\ by\\ the\\ Bakers) ^ 2.

Note that the actual cost is the cost of replacement of one candy of the flavour kk multiplied by the number of candies in the subtree.

Also, sometimes Santa may wish to replace a candy at vertex xx with a candy of some flavour from his pocket.

You need to handle two types of operations:

  • Change the flavour of the candy at vertex xx to ww.
  • Calculate the expected value of error in calculating the cost of replacement for a given flavour kk.

圣诞老人拥有 mm 种口味的糖果,每种口味数量无限。你被给定一棵含 nn 个顶点的有根树,树的根节点为顶点 11。每个顶点上恰好有一颗糖果,其中第 ii 个顶点上的糖果口味为 fif_i。

有时圣诞老人担心口味为 kk 的糖果已经融化。此时他随机选择任意一个顶点 xx,并将以 xx 为根的子树送至面包师处进行更换。在更换过程中,子树中所有口味为 kk 的糖果均被替换为一颗同口味的新糖果;而口味不为 kk 的糖果则保持不变。更换完成后,树恢复原状。

更换一颗口味为 kk 的糖果的实际成本为 ckc_k(对每个 kk 均已给出)。为简化计算,面包师将每次更换的价格固定为 CC,即无论送来的是哪棵子树、也不论所涉及的口味为何,收费均为 CC。

假设对于给定的口味 kk,圣诞老人选择任一顶点进行更换的概率对所有顶点均相等。你需要计算:针对口味 kk,更换成本计算误差的期望值。此处“计算误差”定义如下:

ErrorE(k)=(ActualCost–PricechargedbytheBakers)2.Error\\ E(k) =\\ (Actual Cost\\ –\\ Price\\ charged\\ by\\ the\\ Bakers) ^ 2.

注意:实际成本等于单颗口味为 kk 的糖果的更换成本 ckc_k 乘以该子树中口味为 kk 的糖果总数。

此外,圣诞老人有时也可能希望用自己口袋中某口味的糖果来替换顶点 xx 处的糖果。

你需要处理两种操作:

  • 将顶点 xx 处糖果的口味修改为 ww;
  • 计算针对给定口味 kk 的更换成本计算误差的期望值。

输入格式

The first line of the input contains four integers nn (2 ⩽ n ⩽ 5⋅1042 \leqslant n \leqslant 5 \cdot 10^4), mm, qq, CC (1 ⩽ m,q ⩽ 5⋅1041 \leqslant m, q \leqslant 5 \cdot 10^4, 0⩽C⩽1060 \leqslant C \leqslant 10^6) — the number of nodes, total number of different flavours of candies, the number of queries and the price charged by the Bakers for replacement, respectively.

The second line contains nn integers f1,f2,…,fnf_1, f_2, \dots, f_n (1⩽fi⩽m1 \leqslant f_i \leqslant m), where fif_i is the initial flavour of the candy in the ii-th node.

The third line contains n−1n - 1 integers p2,p3,…,pnp_2, p_3, \dots, p_n (1⩽pi⩽n1 \leqslant p_i \leqslant n), where pip_i is the parent of the ii-th node.

The next line contains mm integers c1,c2,…cmc_1, c_2, \dots c_m (1⩽ci⩽1021 \leqslant c_i \leqslant 10^2), where cic_i is the cost of replacing one candy of flavour ii.

The next qq lines describe the queries. Each line starts with an integer tt (1 ⩽ t ⩽ 21 \leqslant t \leqslant 2) — the type of the query.

If t = 1t = 1, then the line describes a query of the first type. Two integers xx and ww follow (1 ⩽ x⩽ n1 \leqslant  x \leqslant  n, 1⩽ w⩽ m1 \leqslant  w \leqslant m), it means that Santa replaces the candy at vertex xx with flavour ww.

Otherwise, if t=2t = 2, the line describes a query of the second type and an integer kk (1 ⩽ k ⩽ m1 \leqslant k \leqslant m) follows, it means that you should print the expected value of the error in calculating the cost of replacement for a given flavour kk.

The vertices are indexed from 11 to nn. Vertex 11 is the root.

输入的第一行包含四个整数 nn(2 ⩽ n ⩽ 5⋅1042 \leqslant n \leqslant 5 \cdot 10^4)、mm、qq、CC(1 ⩽ m,q ⩽ 5⋅1041 \leqslant m, q \leqslant 5 \cdot 10^4,0⩽C⩽1060 \leqslant C \leqslant 10^6),分别表示节点数量、糖果口味总数、查询次数以及面包师对每次替换收取的费用。

第二行包含 nn 个整数 f1,f2,…,fnf_1, f_2, \dots, f_n(1⩽fi⩽m1 \leqslant f_i \leqslant m),其中 fif_i 表示第 ii 个节点中糖果的初始口味。

第三行包含 n−1n - 1 个整数 p2,p3,…,pnp_2, p_3, \dots, p_n(1⩽pi⩽n1 \leqslant p_i \leqslant n),其中 pip_i 表示第 ii 个节点的父节点。

下一行包含 mm 个整数 c1,c2,…cmc_1, c_2, \dots c_m(1⩽ci⩽1021 \leqslant c_i \leqslant 10^2),其中 cic_i 表示将一个口味为 ii 的糖果替换一次所需的成本。

接下来的 qq 行描述查询。每行以一个整数 tt(1 ⩽ t ⩽ 21 \leqslant t \leqslant 2)开头,表示查询类型。

若 t = 1t = 1,则该行为第一类查询:随后给出两个整数 xx 和 ww(1 ⩽ x⩽ n1 \leqslant  x \leqslant  n,1⩽ w⩽ m1 \leqslant  w \leqslant m),表示圣诞老人将顶点 xx 处的糖果替换为口味 ww。

否则,若 t=2t = 2,则该行为第二类查询:随后给出一个整数 kk(1 ⩽ k ⩽ m1 \leqslant k \leqslant m),表示你需要输出在计算口味 kk 的替换成本时,误差的期望值。

顶点编号从 11 到 nn。顶点 11 是根节点。

输出格式

Output the answer to each query of the second type in a separate line.

Your answer is considered correct if its absolute or relative error does not exceed 10−610^{-6}.

Formally, let your answer be aa, and the jury's answer be bb. The checker program considers your answer correct if and only if ∣a−b∣max(1,b)⩽10−6\frac{|a-b|}{max(1,b)}\leqslant 10^{-6}.

对每个第二类查询,输出答案,每个答案占一行。

若你的答案的绝对误差或相对误差不超过 10−610^{-6},则视为正确。

形式化地,设你的答案为 aa,评测机的答案为 bb。当且仅当 ∣a−b∣max⁡(1,b)⩽10−6\frac{|a-b|}{\max(1,b)}\leqslant 10^{-6} 时,评测程序判定你的答案正确。

输入输出样例

  • 输入#1

    3 5 5 7
    3 1 4
    1 1
    73 1 48 85 89
    2 1
    2 3
    1 2 3
    2 1
    2 3

    输出#1

    2920.333333333333
    593.000000000000
    49.000000000000
    3217.000000000000

说明/提示

For 11-st query, the error in calculating the cost of replacement for flavour 11 if vertex 11, 22 or 33 is chosen are 66266^2, 66266^2 and (−7)2(-7)^2 respectively. Since the probability of choosing any vertex is same, therefore the expected value of error is 662+662+(−7)23\frac{66^2+66^2+(-7)^2}{3}.

Similarly, for 22-nd query the expected value of error is 412+(−7)2+(−7)23\frac{41^2+(-7)^2+(-7)^2}{3}.

After 33-rd query, the flavour at vertex 22 changes from 11 to 33.

For 44-th query, the expected value of error is (−7)2+(−7)2+(−7)23\frac{(-7)^2+(-7)^2+(-7)^2}{3}.

Similarly, for 55-th query, the expected value of error is 892+412+(−7)23\frac{89^2+41^2+(-7)^2}{3}.

对于第 11 次查询,若选择顶点 11、22 或 33 来计算口味 11 的替换代价,所产生的误差分别为 66266^2、66266^2 和 (−7)2(-7)^2。由于选择任意顶点的概率相同,因此误差的期望值为 662+662+(−7)23\frac{66^2+66^2+(-7)^2}{3}。

类似地,对于第 22 次查询,误差的期望值为 412+(−7)2+(−7)23\frac{41^2+(-7)^2+(-7)^2}{3}。

第 33 次查询后,顶点 22 处的口味由 11 变为 33。

对于第 44 次查询,误差的期望值为 (−7)2+(−7)2+(−7)23\frac{(-7)^2+(-7)^2+(-7)^2}{3}。

类似地,对于第 55 次查询,误差的期望值为 892+412+(−7)23\frac{89^2+41^2+(-7)^2}{3}。

输入解题思路,AI测评打分。不知道怎么写?

首页