#HK5240. 「UOI 2020 Stage 4 Day2」树的拓扑排序

「UOI 2020 Stage 4 Day2」树的拓扑排序

题目描述

题目译自 Ukrainian Olympiads in Informatics 2020 Stage 4 Day2 T3. Топологічні сортування дерева

给定一棵有 nn 个顶点的树,顶点编号从 11nn。树的根是编号为 11 的顶点。对于每个顶点 vv(从 22nn),定义 pvp_v 为与 vv 相邻且位于顶点 vv 到根的简单路径上的顶点编号。在每条边 (pv,v)(p_v, v) 上写有一个符号 <\texttt{<}>\texttt{>}

找出将数字 11nn 写入树顶点的方法数量,使得每个数字恰好使用一次,并且满足所有边上标示的关系。即对于所有标有 <\texttt{<} 的边,必须满足 a[pv]<a[v]a[p_v] < a[v],对于所有标有 >\texttt{>} 的边,必须满足 a[pv]>a[v]a[p_v] > a[v]

由于答案可能非常大,请输出答案对 109+710^{9} + 7 取模的结果。

输入格式

第一行包含一个整数 nn (1n3000)(1 \leq n \leq 3000),表示树的顶点数量。

接下来的 n1n-1 行,每行包含一个整数 pip_i (1pi<i)(1 \leq p_i < i) 和一个字符 cic_i (ci{<,>})(c_i \in \{\texttt{<}, \texttt{>}\}),表示顶点 pip_iii 之间的边上标有符号 cic_i。请注意,这里的 ii22 开始编号。

输出格式

输出一个整数,表示将数字 11nn 分配到树顶点上并满足所有边上关系的方法数量。请注意,需要输出的是答案对 109+710^{9} + 7 取模后的结果,而非原始答案。

4
1 <
2 <
3 >

3

4
1 <
1 <
1 <

6

5
1 <
1 <
3 >
3 >

18

数据范围与提示

详细子任务附加限制及分值如下表所示:

子任务 分值 附加限制
11 88 n10n \leq 10
22 66 n18n \leq 18
33 1010 ci=<c_i = \texttt{<}
44 44 pi=1p_i = 1
55 1313 pi=i1p_i = i - 1, 1n2001 \leq n \leq 200
66 1919 pi=i1p_i = i - 1
77 2424 n200n \leq 200
88 1616 无附加限制