P10006 [集训队互测 2023] 超现实树
题目背景
Alek 喜欢打信息竞赛,尤其喜欢超现实树。超现实树,顾名思义,就是树上的超现实数。
题目描述
Alek 认为,对于常数 $k$,一个字符串被称为「$k$-超现实数串」,如果其只包含字符 $\texttt{\{}, \texttt{|}, \texttt{\}}$,且:
- 空串为 $k$-超现实数串;
- 如果 $s, t$ 为 $k$-超现实数串,那么 $s + t$ 为 $k$-超现实数串;
- 如果 $k + 1$ 个字符串 $s_1, s_2, \cdots, s_{k + 1}$ 都是 $k$-超现实数串,那么 $\texttt{\{} + s_1 + \texttt{|} + s_2 + \texttt{|} + \cdots + \texttt{|} + s_{k + 1} + \texttt{\}}$ 为 $k$-超现实数串;
- $k$-超现实数串仅限于此。
给定一棵 $n$ 个点的无根树,节点编号为 $1 \sim n$。每个点 $i$ 上有一个字符 $a_i \in \{\texttt{\{}, \texttt{|}, \texttt{\}}\}$。
给定整数 $m$,Alek 希望你对 $k = 0, 1, \cdots, m$ 分别求出:有多少有序对 $(x, y)$,$1 \leq x, y \leq n$,使得树上从点 $x$ 到点 $y$ 的唯一简单路径上的字符依次拼接所得字符串是 $k$-超现实数串。
输入格式
第一行两个整数 $n, m$,分别表示树的节点数,和需要求答案的 $k$ 的上限。
第二行一个字符串 $a$,$a$ 的第 $i$ 个字符表示点 $i$ 上的字符。
接下来 $n - 1$ 行,每行两个整数 $x, y$,表示存在一条连接点 $x$ 和点 $y$ 的边。
输出格式
输出一行 $m + 1$ 个整数,分别表示 $k = 0, 1, \cdots, m$ 时的答案。
说明/提示
对于所有数据,有 $2 \leq n \leq 10^5$,$0 \leq m \leq n - 2$,$a_i \in \{\texttt{\{}, \texttt{|}, \texttt{\}}\}$。
- **Subtask 1**(5 分):$n \leq 4601$;
- **Subtask 2**(20 分):对每条边 $(x, y)$ 有 $y = x + 1$;
- **Subtask 3**(5 分):$a_i \neq \texttt{|}$, $m = 0$;
- **Subtask 4**(15 分,依赖 Subtask 3):$m \leq 3$;
- **Subtask 5**(25 分,依赖 Subtask 1):$n \leq 5 \times 10^4$;
- **Subtask 6**(30 分,依赖 Subtask 1, 2, 3, 4, 5):无特殊限制。