CF2101E.Kia Bakes a Cake
NOI/NOI+/CTSC
通过率:0%
AC君温馨提醒
该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
给定一个长度为 n 的二进制字符串 s 和一棵包含 n 个顶点的树 T。设 k 为 s 中字符 1 的数量。我们将按照以下规则构造一个包含 k 个顶点的完全无向加权图:
- 对于每个满足 si=1 的 1≤i≤n,创建一个标记为 i 的顶点。
- 对于在上述步骤中创建的任意两个标记为 u 和 v 的顶点,定义它们之间的边权 w(u,v) 为顶点 u 和顶点 v 在树 T 中的距离 ∗。
一个依次访问标记为 v1,v2,…,vm 的顶点的简单路径 † 被称为"优美的",如果对于所有 1≤i≤m−2,满足条件 2⋅w(vi,vi+1)≤w(vi+1,vi+2)。换句话说,路径中每条边的权值必须至少是前一条边权值的两倍。注意对于所有 1≤i≤m,必须满足 svi=1,否则将不存在对应标记的顶点。
对于完全无向加权图中每个标记为 i 的顶点(1≤i≤n 且 si=1),确定从该顶点出发的所有优美简单路径中包含顶点的最大数量。
∗ 树中两个顶点 a 和 b 之间的距离等于顶点 a 和顶点 b 之间唯一简单路径上的边数。
† 路径是指顶点序列 v1,v2,…,vm,其中对于所有 1≤i≤m−1,vi 和 vi+1 之间存在一条边。简单路径是指没有重复顶点的路径,即对于所有 1≤i<j≤m,vi=vj。
输入格式
每个测试包含多个测试用例。第一行输入测试用例数量 t(1≤t≤104)。接下来是各测试用例的描述。
每个测试用例的第一行包含一个整数 n(1≤n≤7⋅104)——二进制字符串 s 的长度和树 T 的顶点数。
第二行包含一个由 n 个字符组成的二进制字符串 s1s2…sn(si∈{0,1})——表示要在完全无向加权图中构造顶点的字符串。
接下来的 n−1 行,每行包含两个整数 u 和 v(1≤u,v≤n)——树 T 的边的端点。
保证给定的边构成一棵树。
保证所有测试用例的 n 之和不超过 7⋅104。
输出格式
对于每个测试用例,输出 n 个整数,第 i 个整数表示从标记为 i 的顶点出发的所有优美简单路径中包含顶点的最大数量。如果不存在标记为 i 的顶点(即 si=0),则输出 −1。
输入输出样例
输入#1
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
-1 3 3 3 3 -1 5 4 -1 4 -1 5 5 5 5 -1 4 -1 5 5 -1 3 -1 1
说明/提示
在第一个测试用例中,树 T 和构造的图如下所示:
左侧是树 T,选中的节点标记为黄色。右侧是构造的完全图。图中展示的优美路径是 3→4→2。该路径是优美的,因为 w(4,2)=2 至少是 w(3,4)=1 的两倍。尝试用 2→5 扩展路径是不可行的,因为 w(2,5)=3 小于 w(4,2)=2 的两倍。
在第二个测试用例中,树 T 是一条长度为 17 的简单路径。从标记为 2 的顶点出发的一个优美路径示例是 2→3→5→9→17,其边权依次为 1,2,4,8,每次翻倍。
翻译由 DeepSeek V3 完成
输入解题思路,AI测评打分。不知道怎么写?