P9648 [SNCPC2019] Unrooted Trie

题目描述

### 题目背景 trie 的定义是这样的: - 一棵大小为 $n$ 的 trie,是一棵有着 $n$ 个节点和 $(n-1)$ 条边的有根树,每一条边上都标有一个字符; - 在 trie 中,从根结点到树上某一结点的路径代表一个字符串,节点 $x$ 代表的字符串记为 $s(x)$,特别地,根节点代表的字符串为空串。 - 若节点 $u$ 是节点 $v$ 的父节点,且 $c$ 是连接 $u$ 与 $v$ 的边上的字符,则有 $s(v) = s(u) + c$(这里的 $+$ 表示字符串的连接,而非普通的加法运算)。 当每一个节点代表的字符串互不相同时,该 trie 是合法的。 给出一个无根的 trie,求其中有多少节点可作为该 trie 的根,使得该 trie 合法。

输入格式

**每个测试点由多组数据组成。** 输入的第一行包含一个正整数 $T$,代表测试数据的组数。 对于每组测试数据: 数据的第一行包含一个正整数 $n$,代表 trie 的大小。 接下来的 $(n-1)$ 行中,第 $i$ 行包含两个正整数 $u_i,v_i$ 以及一个字符 $c_i$,用空格隔开,表示有一条标有 $c_i$ 的边连接着 $u_i$ 和 $v_i$。

输出格式

对于每组测试数据,输出一行一个正整数,表示可以成为根后可以使该 trie 合法的节点的个数。

说明/提示

【样例解释】 对于第一组测试数据,只能选择节点 $1$ 或节点 $2$ 作为根,否则 $s(1)$ 和 $s(2)$ 相同。 对于第二组测试数据,无论如何选择节点作为根,$s(1)$ 和 $s(2)$ 或 $s(5)$ 和 $s(6)$ 相同。 对于每组数据,$1 \le n \le 2 \times 10^5$,$1 \le u_i,v_i \le n$,$c_i$ 都是小写字母。 对于每个测试点,保证给出的图是一棵树,所有的 $n$ 之和不会超过 $10^6$。