时间限制:C/C++/Rust/Pascal 2秒,其他语言4秒
空间限制:C/C++/Rust/Pascal 512 M,其他语言1024 M
64bit IO Format: %lld
题目描述
染火枫林,琼壶歌月,长歌倚楼。
岁岁年年,花前月下,一尊芳酒。
水落红莲,唯闻玉磬,但此情依旧。
给定一棵有

个结点的有根树,根结点编号为

,每个结点都对应一个小写拉丁字母

作为它们的权值。
现在有

次操作,操作分为两种:

给定结点编号

, 将以

为根的子树中的所有结点(包括自己)的权值

全部

。

给定两个结点编号

, 询问以

为端点的简单路径上有多少个结点可以作为树上
任意一条长度不小于2的路径所构成的
回文串的
回文中心。
对于每次操作

,输出一个整数表示答案。
输入描述:
第一行输入一个整数
表示树上点个数。
接下来

行,每行输入两个整数
)
, 表示结点编号为

的两个点之间有一条边。
接下来一行输入
个小写字母
表示编号为 i 的结点对应的字母权值。 接下来一行输入一个整数
)
表示操作的次数。
下面

行,每行先输入一个整数
)
表示对应的操作种类,
如果

, 则紧跟着输入一个整数
)
表示被修改子树的根结点。
如果

, 则紧跟着输入两个以空格隔开的整数
)
表示询问的简单路径的端点。
输出描述:
对于每次操作
,输出一个整数表示答案。
示例1
输入
复制
5
1 2
2 3
1 4
4 5
a b z b z
5
2 3 5
1 3
2 3 5
1 5
2 3 5