[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$。
题目描述
Recall the definition of a trie:
- A trie of size $n$ is a rooted tree with $n$ vertices and $(n-1)$ edges, where each edge is marked with a character;
- Each vertex in a trie represents a string. Let $s(x)$ be the string vertex $x$ represents;
- The root of the trie represents an empty string. Let vertex $u$ be the parent of vertex $v$, and let $c$ be the character marked on the edge connecting vertex $u$ and $v$, we have $s(v)$ = $s(u) + c$. Here $+$ indicates string concatenation, not the normal addition operation.
We say a trie is valid, if the string each vertex represents is distinct.
Given an unrooted tree with $n$ vertices and $(n-1)$ edges, where each edge is marked with a character, how many different vertices can be selected as the root of the tree so that the tree becomes a valid trie?
输入输出格式
输入格式
There are multiple test cases. The first line of the input contains an integer $T$, indicating the number of test cases. For each test case:
The first line contains an integer $n$ ($1 \le n \le 10^5$), indicating the size of the tree.
For the following $(n-1)$ lines, the $i$-th line contains two integers $u_i$, $v_i$ ($1 \le u_i, v_i \le n$) and a character $c_i$ separated by a space, indicating that there is an edge marked with a character $c_i$ connecting vertex $u_i$ and $v_i$. It's guaranteed that $c_i$ will only be lower-case English letters.
It's guaranteed that the given graph is a tree, and the sum of $n$ of all test cases will not exceed $10^6$.
输出格式
For each test case output one line containing one integer, indicating the number of different vertices that can be selected as the root of the tree to make it a valid trie.
输入输出样例
输入样例 #1
2
6
3 1 a
3 2 a
3 4 b
4 5 c
4 6 d
6
3 1 a
3 2 a
3 4 b
5 4 c
6 4 c
输出样例 #1
2
0
说明
For the first sample test case, we can only select vertex 1 or vertex 2 as the root, otherwise $s(1)$ and $s(2)$ will be the same.
For the second sample test case, no matter which vertex we select as the root, $s(1)$ and $s(2)$, or $s(5)$ and $s(6)$ will be the same.