题目描述
FarmerJohn对他迄今为止对平衡括号的体验着迷,很好奇您是否可以帮助他解决最后一个问题。事实证明,FJ的农场是一棵有 N个牧场的巨树(1<=N<=40,000),每个牧 场他都用 (或 )标记。例如:
'('−−'('−−')'−−'('−−')'
∣∣
')' ')'−−'('−−'('
∣∣
')' '('−−')'−−')'−−')'−−'('
回想一下,由于他的农场是一棵树,这意味着某些对牧场由走廊连接,因此在任何给定牧场之间都有一条独特的路径。FJ认为其中一些路径代表平衡的括号串。特别是,他想知道,在所有由通过树的路径表示的平衡字符串中,可以找到的最大嵌套深度是多少。平衡的括号字符串的嵌套深度是在字符串的所有前缀中,前缀中多余的 ('s数量的最大值。例如,字符串 ()()()的嵌套深度为 1,但字符串 ((()))()的嵌套深度为 3,如果我们为字符串的每个前缀计算多余的 (),我们可以清楚地看到:
((()))()
12321010
对于上面的示例农场,最深的字符串是 ((())),深度为 3,可以通过以下从 A到 B的路径获得:
'('--'('--')'--'('--')'
| |
')' ')'--'('--'(' < A
| |
')' '('--')'--')'--')'--'('
^C ^B
请注意,这与最长的平衡字符串不同;例如 (())(()),从 A开始到 C结束,长度为 8。
你的任务是输出树中最深平衡路径的嵌套深度。
给出一棵树,每个结点上有一个括号。问在所有括号平衡的路径中,最大嵌套层数为多少。
输入格式
第 1行:单个整数 N,树中的节点数。
第 2..N行:第 i+1行:单个整数 p(i+1)(1<=p(i+1)<=i),表示节点 i+1和 p_{i+1之间的边}在树上。
LinesN+1..2N:LineN+i:要么 (要么 ),节点 i的标签。
输出格式
第 1行:单个整数,给出平衡路径的最大嵌套深度。
样例
输入样例
15
1
2
1
4
4
6
7
5
9
9
11
12
13
14
(
)
)
(
)
)
(
)
(
(
(
)
)
)
(
输出样例
3
提示
这是问题描述中的示例,具有以下节点标签:
1'('−−4'('−−6')'−−7'('−−8')'
∣∣
2')' 5')'−−9'('−−10'('
∣∣
3')' 11'('−−12')'−−13')'−−14')'−−15'('