生活在树上——始终热爱大地——升上天空。
给你一棵有 $$$n$$$ 个节点的树,树上的每一个节点处都有一个字符 $$$c$$$,为 "(" 或 ")" 。一共有 $$$q$$$ 次询问,每次询问树上从 $$$u$$$ 到 $$$v$$$ 有向的简单路径中所有节点构成的字符串 $$$s$$$ 是否是好的。
树上的一条从 $$$u$$$ 到 $$$v$$$ 有向的简单路径是指由一条由树上许多条连续的边组成的路径,第一条边从 $$$u$$$ 出发,最后一条边到达 $$$v$$$,并且该路径只经过树上每个点最多一次。
定义这样的一个只由字符 "(" 和 ")" 组成字符串 $$$s$$$ 是好的: 开始时,你在 $$$s$$$ 的第一个字符上,结束时,你必须站在 $$$s$$$ 的最后一个字符上。在每一个时刻你可以向左移动一个空格(如果你没有站在第一个字符上),或向右移动一个空格(如果你没有站在最后一个字符上)。你不能停留在同一个地方,但可以访问任何字符,包括第一个和最后一个字符,访问次数不限。在每个时间点,你都要写下当前所站的字符。如果存在某种移动序列,能让你从第一个字符走到最后一个字符,从而使你写下的字符串是一个匹配的括号序列,那么我们就说这个字符串 $$$s$$$ 是好的。
所谓匹配的括号序列,是指可以通过在序列的原始字符之间插入字符 "1" 和 "+",将其转换为正确算术表达式的括号序列。例如,括号序列 "()()"、"(())" 就是匹配的括号序列(得到的表达式为"(1)+(1)"、"((1+1)+1)"),而 ")(" 和 "(" 则不是。
例如,字符串 "()(())))" 是好的,因为在每个时刻,你可以按照 $$$[1,2,3,4,3,4,5,6,7,8]$$$,这样的顺序在字符串上移动,最终的序列为 "()(((())))",是一个匹配的括号序列。 而字符串 "())(()()(())" 就不是好的,可以确定的是,在每个时刻不论你如何再这个字符串上移动,都不可能得到一个匹配的括号序列。
第一行,一个整数 $$$n(1\le n \le 2·10^5)$$$,代表树的结点数。
接下来的 $$$n-1$$$ 行,每行两个数字 $$$u,v(1\le u,v \le n;u\neq v)$$$,代表树上的一条边,保证最终构成一棵树。 接下来的一行,为一个长度为 $$$n$$$ 只由字符 "(" 和 ")" 组成字符串 $$$s$$$,$$$s_i$$$ 代表树上第 $$$i$$$ 个节点上的字符 $$$c$$$。
下一行,一个整数 $$$q(1\le q \le 2·10^5)$$$,代表询问的次数。
接下来连续的 $$$q$$$ 行,每行两个整数 $$$u,v$$$,代表一次询问树上从 $$$u$$$ 到 $$$v$$$ 有向的简单路径中所有节点构成的字符串 $$$s$$$ 是否是好的。
共 $$$q$$$ 行,如果上从 $$$u$$$ 到 $$$v$$$ 有向的简单路径中所有节点构成的字符串 $$$s$$$ 是好的,那么输出一行 "YES" ,否则,输出一行 "NO"。
你可以输出 "YES "和 "NO" 的任何大小写形式(例如,字符串 "yES"、"yes "和 "Yes" 都将被当作肯定的答案)。
8 1 2 3 1 4 1 2 5 8 4 5 6 7 5 )()((()) 7 5 7 7 5 5 3 6 7 4 8 2 8 2 3
Yes No Yes No Yes Yes No
20 12 5 17 18 18 2 8 19 19 1 14 9 8 15 3 12 18 7 8 14 18 4 14 6 14 10 7 11 8 3 14 13 13 16 8 17 8 20 )((()()())(((((()))) 20 15 19 16 5 13 20 8 17 13 20 11 5 11 5 13 19 3 5 14 5 15 7 6 5 3 18 11 20 11 19 14 17 6 17 8 19 11 20 15 18
No No No Yes No No No No No No No No Yes No No No No Yes No Yes