CF2219C Coloring a Red Black Tree

题目描述

给定一个有 $n$ 个结点的树,结点编号从 1 到 $n$。另外还给出了一个长度为 $n$ 的二进制字符串 $s$,其中 $s_i = 1$ 表示第 $i$ 个结点被染成红色,$s_i = 0$ 表示第 $i$ 个结点被染成黑色。你可以进行以下操作: - 选择某个结点 $a$($1 \le a \le n$)。 - 均匀随机选择结点 $a$ 的一个相邻结点 $b$。 - 将结点 $a$ 的颜色变为结点 $b$ 的颜色。注意,改变颜色的是你选择的 $a$ 结点,而不是被随机选择的 $b$ 结点。 你的目标是通过任意多次(也可以一次都不做)上述操作,将整棵树的所有结点都染成红色。请你计算出,在最优策略下,使所有结点最终都变成红色所需操作次数的最小期望值。 保证一开始至少有一个结点为红色。

输入格式

每组测试数据包含多组测试用例。第一行为测试用例数 $t$($1 \le t \le 1000$)。每组测试用例的描述如下: 第一行为一个整数 $n$($1 \le n \le 2 \times 10^5$)。 第二行为一个长度为 $n$ 的二进制字符串 $s$。 接下来的 $n-1$ 行,每行有两个整数 $u_i$ 和 $v_i$($1 \le u_i, v_i \le n$),表示结点 $u_i$ 和 $v_i$ 之间有一条边。 保证给定的图是一棵树,并且至少有一个结点初始为红色。所有测试用例的 $n$ 之和不超过 $2 \times 10^5$。

输出格式

对于每组测试用例,输出一个实数,表示最小期望操作次数。 如果你的答案与标准答案的绝对误差或相对误差不超过 $10^{-6}$,则视为正确。 形式化来说,记你的答案为 $x$,标准答案为 $y$,仅当 $\frac{|x - y|}{\max{(1, |y|)}} \le 10^{-6}$ 时,判为正确。

说明/提示

在第一个测试用例中,只有一个结点是黑色,而它有两个红色相邻结点,因此,如果我们首先对第 2 个结点操作,整棵树在一次操作后就会全部变红。 由 ChatGPT 5 翻译