#CF2101E. Kia 烤蛋糕
Kia 烤蛋糕
E. Kia 烤蛋糕
每个测试的时间限制: 秒
内存限制: 兆字节
题目描述
你有一个长度为 的二进制字符串 和一棵有 个顶点的树 。设 是 中 的个数。我们将按照如下方式构造一个具有 个顶点的完全无向加权图:
- 对于每个满足 的 ,创建一个标号为 的顶点。
- 对于上一步创建的两个顶点 和 ,定义它们之间的边权 为树 中顶点 和顶点 之间的距离。
一条按顺序访问顶点 的简单路径 被称为nice,如果对于所有 ,条件: [ 2 \cdot w(v_i, v_{i+1}) \le w(v_{i+1}, v_{i+2}) ] 成立。换句话说,路径中每条边的权值至少是前一条边权值的两倍。注意,对于所有 ,必须满足 ,否则不会有对应标号的顶点。
对于完全无向加权图中的每个标号为 的顶点(即 且 ),求出从该顶点出发的 nice 简单路径最多能包含多少个顶点。
距离:树 中两个顶点 和 之间的距离等于它们之间唯一简单路径上的边数。
路径:顶点序列 ,满足对于所有 , 和 之间有边。简单路径是指没有重复顶点的路径,即对于所有 ,有 。
输入格式
每个测试包含多个测试用例。
第一行包含一个整数 ()—— 测试用例的数量。
每个测试用例描述如下:
- 第一行包含一个整数 ()—— 二进制字符串 的长度以及树 的顶点数。
- 第二行包含一个长度为 的二进制字符串 ()—— 表示要构建的完全无向加权图中的顶点。
- 接下来的 行,每行包含两个整数 和 ()—— 树 中边的端点。
保证给出的边构成一棵树。
保证所有测试用例的 之和不超过 。
输出格式
对于每个测试用例,输出 个整数,其中第 个整数表示从标号为 的顶点出发的 nice 简单路径最多能包含的顶点数。如果顶点 不存在(即 ),则输出 。
示例
输入:
3
5
01111
1 2
2 3
3 4
4 5
17
01101011110101101
1 2
2 3
3 4
4 5
5 6
6 7
7 8
8 9
9 10
10 11
11 12
12 13
13 14
14 15
15 16
16 17
2
01
1 2
输出:
-1 3 3 3 3
-1 5 4 -1 4 -1 5 5 5 5 -1 4 -1 5 5 -1 3
-1 1
样例解释
第一个测试用例:树 和构造出的图如下:
- 左侧是树 ,选中节点标记为黄色。
- 右侧是构造出的完全图。
图中所示的 nice 路径是 ,因为 至少是 的两倍。尝试用 扩展此路径是不可行的,因为 小于 。
第二个测试用例:树 是一条长度为 的简单路径。从节点 出发的一个 nice 路径示例是 ,其边权分别为 ,每次翻倍。