#C2026XSR3K. 回文路线(palindrome)

回文路线(palindrome)

文件输入输出提示

本题采用文件输入输出。提交代码时,请在 main 函数开头加入文件重定向,并从 palindrome.in 读入、输出到 palindrome.out

freopen("palindrome.in", "r", stdin);
freopen("palindrome.out", "w", stdout);

题目描述

苗苗设计了一项校园回文路线挑战。校园中有 nn 个地点,由 n1n-1 条道路连接成一棵树。每条道路上写有一个小写字母,字母范围为 at

任意两个不同地点之间,都有唯一的一条简单路径。

对于两个地点 uuvv,把路径上所有道路的字母收集起来。如果这些字母重新排列后可以组成一个回文串,就称点对 (u,v)(u,v) 是一条“回文路线”。

请你统计有多少个不同的点对 (u,v)(u,v) 满足 1u<vn1\le u<v\le n,并且 (u,v)(u,v) 是回文路线。

输入格式

从文件 palindrome.in 中读入数据。

第一行输入一个整数 nn

接下来 n1n-1 行,每行输入两个整数 u,vu,v 和一个字符 chch,表示地点 uu 和地点 vv 之间有一条写着 chch 的道路。

输出格式

输出到文件 palindrome.out 中。

输出一行一个整数,表示回文路线的数量。

输入输出样例 #1

输入 #1

5
1 2 a
2 3 b
2 4 a
4 5 b

输出 #1

7

说明/提示

满足条件的点对共有 7 个:

(1,2)(1,2)(1,4)(1,4)(1,5)(1,5)(2,3)(2,3)(2,4)(2,4)(3,5)(3,5)(4,5)(4,5)

例如 (3,5)(3,5) 的路径上字母为 b,a,b,可以重排为回文串 bab

输入输出样例 #2

输入 #2

4
1 2 a
1 3 a
1 4 a

输出 #2

6

第二个样例中,任意两个地点之间路径上的字母都只包含 a,一定可以重排成回文串,因此 44 个地点形成的 66 个点对都满足要求。

数据范围与子任务

对于所有数据,满足:

  • 2n2×1052\le n\le 2\times 10^5
  • 输入的道路保证构成一棵树;
  • chch 是从 at 的小写字母。
测试点编号 nn\le 特殊性质
131\sim 3 300300
464\sim 6 30003000
797\sim 9 2×1052\times 10^5 树是一条链
101210\sim 12 只出现 abc 三种字母
132013\sim 20

palindrome_大样例.zip