Bingbong的回文路径
题号:NC272046
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

⭐“我画了你身边每一个人,但却没有画你。我觉得你亮得耀眼,使我的目光无法停留。”
Bingbong 有一棵有根树,根节点为 1,总共有 n 个节点。树中的节点通过 n-1 条无向边相连,每条边的权重为 1
树中的每个节点包含一个小写字母。Bingbong 将选择从节点 u 开始,并在选择最短路径的情况下到达节点 v。他想知道他所走路径形成的字符串是否是一个回文串。由于他会进行多次行走,您需要回答多个查询。

输入描述:

第一行包含一个整数n(1\leq n\leq 10^5),表示节点的数量。
第二行包含n个小写字母,其中第i个字母表示第i个节点上的小写字母。
第三行包含n个整数,其中第i个数字a_i (1\leq a_i\leq i-1)表示第i个节点的父节点,对于根节点a_i=0
第四行包含一个整数q(1\leq q\leq 10^5),表示查询的数量。
接下来是q行,每行包含两个整数uv,表示一个查询的起点和终点。

输出描述:

输出q行,每行包含一个字符串。如果查询的起点到终点的路径连接形成一个回文串,则输出"YES",否则输出"NO"。
示例1

输入

复制
5
bbaaa
0 1 1 2 2
3
2 3
4 3
5 3

输出

复制
NO
YES
YES