CF601D Acyclic Organic Compounds

题目描述

给定一棵有 $n$ 个结点的树 $T$(结点编号为 $1$ 到 $n$),每个结点上标有一个字母。该树以结点 $1$ 作为根。 对于某个结点 $v$ 的子树 $T_v$,可以沿着从 $v$ 出发,经过简单路径到达 $T_v$ 中某个结点(可以是 $v$ 本身)的路径,读取一个字符串。我们用 $F(v)$ 表示能通过上述方式读取到的不同字符串的数量。 每个结点 $v$ 都有一个权值 $c_v$。我们关注 $F(v) + c_v$ 值最大的那些结点。 请你计算两个统计量:所有 $1 \leq v \leq n$ 的 $F(v)+c_v$ 的最大值,以及取到最大值的结点数。

输入格式

第一行包含一个整数 $n$($1 \leq n \leq 300000$)——树的结点数。 第二行包含 $n$ 个用空格分隔的整数 $c_i$($0 \leq c_i \leq 10^{9}$)。 第三行包含一个长度为 $n$ 的小写英文字母字符串 $s$,第 $i$ 个字符为结点 $i$ 上的字母。 接下来的 $n-1$ 行,每行包含两个用空格分隔的整数 $u$ 和 $v$($1 \leq u,v \leq n$),表示树中一条连接 $u$ 和 $v$ 的边。 保证输入数据描述的是一棵树。

输出格式

输出两行。 第一行输出所有 $1 \leq v \leq n$ 的 $F(v)+c_v$ 的最大值。 第二行输出取得最大值的结点数量。

说明/提示

在第一个样例中,树的结构如下: ![](https://cdn.luogu.com.cn/upload/vjudge_pic/CF601D/9244e4a8ade3af9b76853a18eae8ae654a6d5be1.png) 各个结点可读取的字符串集合如下: ![](https://cdn.luogu.com.cn/upload/vjudge_pic/CF601D/b0a25806e20ff995abfb34a167834abd113ae6f1.png) 最终各结点的 $F(v)+c_v$ 值为: ![](https://cdn.luogu.com.cn/upload/vjudge_pic/CF601D/6c3fc4aa4c72ec4c2646ac39d7110bd6544e120f.png) 在第二个样例中,各结点的 $F(v)+c_v$ 值为 $ (5,4,2,1,1,1) $。在 $T_2$ 的不同字符串为 ![](https://cdn.luogu.com.cn/upload/vjudge_pic/CF601D/6427dc79a89c97e7e81a3e52fb54938acda3e0b8.png);注意 ![](https://cdn.luogu.com.cn/upload/vjudge_pic/CF601D/ff39f896bb407bf8e8d94b0a5b47a67e60c595d8.png) 可以分别通过到结点 $3$ 或 $4$ 的两条路径得到。 由 ChatGPT 5 翻译