#loj5370. 「OOI 2023 Day 1」汽油价格

    ID: 11050 传统题 3500ms 1024MiB 尝试: 1 已通过: 1 难度: 10 上传者: 标签>2023OOI线段树倍增二分并查集树链剖分哈希 hashingNOI/NOI+/CTS

「OOI 2023 Day 1」汽油价格

[AdditionalFile5370.zip](file://AdditionalFile5370.zip?type=additional_file)

#5370. 「OOI 2023 Day 1」汽油价格

标签: 传统 | 时间限制: 3500 ms | 内存限制: 1024 MiB |

题目描述

题目译自 Open Olympiad in Informatics 2023 Day1 T2 「Цены на бензин

伯利兰迪亚是一个庞大的国家,包含 nn 个城市。伯利兰迪亚的道路网络可以看作一棵有根树,总共有 n1n - 1 条道路,从任意城市到另一城市有且仅有一条路径,且不会重复经过同一城市。为了便于描述国家结构,对于每个城市 ii,固定了一个城市 pip_i,表示从城市 ii 前往城市 11 时需要首先到达的城市。换句话说,如果将树以城市 11 为根,pip_i 即为城市 ii 的直接父节点。

伯利兰迪亚的每个城市都有一座加油站。这些加油站的定价方式很特别,每座加油站都有一个固定的价格范围,愿意在这个范围内销售汽油。城市 ii 的加油站愿意以任何价格从 lil_irir_i(包含边界)出售汽油。

伯利兰迪亚的国王是个模范的家庭人,在 mm 年内,他每年都会有两个儿子出生。国王的孩子从小就参与国家事务,每年年底他们会检查汽油价格的公平性。从出生开始,在第 ii 年出生的国王孩子分别负责检查从城市 aia_i 到城市 bib_i 和从城市 cic_i 到城市 did_i 的路径上的汽油价格。

检查过程如下:两个孩子同时分别从城市 aia_icic_i 开始他们的旅程。第 ii 年出生的第一个儿子沿着从城市 aia_i 到城市 bib_i 的路径前进,第二个儿子沿着从城市 cic_i 到城市 did_i 的路径前进。他们会检查城市 aia_i 的汽油价格是否与城市 cic_i 的价格一致;接着检查从 aia_ibib_i 路径上的第二个城市与从 cic_idid_i 路径上的第二个城市的汽油价格是否一致;以此类推,直到检查城市 bib_idid_i 的价格是否一致。保证从城市 aia_ibib_i 的路径长度与从城市 cic_idid_i 的路径长度相等。

加油站必须严格遵守法律,因此所有汽油价格的检查都不能发现违规行为。请帮助伯利兰迪亚的加油站计算,在 mm 年内他们有多少种方式可以设定汽油价格。换句话说,对于从 11mm 的每个 ii,计算在所有加油站设定汽油价格的方式数量,使得在第 ii 年及之前的孩子们进行检查时没有发现违规,并且每个加油站的价格都在其允许范围内。由于方式数量可能很大,请将答案对 109+710^{9} + 7 取模。

输入格式

第一行包含一个整数 nn (1n200000)(1 \le n \le 200000),表示伯利兰迪亚的城市数量。

第二行包含 n1n - 1 个整数 p2,p3,p4,,pnp_2, p_3, p_4, \ldots, p_n (1pin)(1 \le p_i \le n),其中 pip_i 表示从城市 ii 到城市 11 路径上的下一个城市。

接下来的 nn 行,每行包含两个整数 lil_irir_i (1liri<109+7)(1 \le l_i \le r_i < 10^{9}+7),定义第 ii 号加油站的允许价格范围。

接下来的一行包含一个整数 mm (1m200000)(1 \le m \le 200000),表示国王有孩子出生的年数。

接下来的 mm 行,每行包含四个整数 ai,bi,ci,dia_i, b_i, c_i, d_i (1ai,bi,ci,din)(1 \le a_i, b_i, c_i, d_i \le n),定义第 ii 年出生的国王孩子将检查的两个路径。保证从城市 aia_ibib_i 的路径长度等于从城市 cic_idid_i 的路径长度。

输出格式

输出 mm 行,每行一个数字。第 ii 行的数字应等于在所有城市设定汽油价格的方式数量,使得第 ii 年及之前出生的国王孩子在检查时未发现违规。答案请对 109+710^{9} + 7 取模。

样例 1

输入

5
1 1 2 2
2 4
1 3
1 3
2 4
4 4
4
1 1 2 2
1 2 2 1
3 4 4 3
3 4 3 5

输出

18
18
4
0

以第一个样例为例:

在第一对儿子出生后,城市 1122 的价格必须相等。共有 22 种方式为城市 1122 选择相同的汽油价格,使其在各自的允许范围内。因此,设定汽油价格的总方式数为 2331=182 \cdot 3 \cdot 3 \cdot 1 = 18

第二对儿子将检查路径 121 - 2212 - 1。这意味着城市 1122 的汽油价格必须一致,而这一条件已经满足。因此,在第二对儿子出生后,答案没有变化。

第三对儿子将检查路径 31243 - 1 - 2 - 442134 - 2 - 1 - 3。这意味着城市 33 的汽油价格必须与城市 44 的价格相等,且城市 11 的价格必须与城市 22 的价格相等。城市 1122 的价格已经是相同的。对于城市 3344,有 22 种方式选择相同的汽油价格,使其在各自的允许范围内。因此,设定汽油价格的总方式数为 221=62 \cdot 2 \cdot 1 = 6

第四对儿子将检查路径 31243 - 1 - 2 - 431253 - 1 - 2 - 5。这意味着城市 4455 的价格必须相等,并且由于城市 3344 的价格已经一致,城市 334455 的汽油价格必须相同。城市 33 的汽油价格必须不大于 33,而城市 55 的汽油价格必须不小于 44。因此,在第四对儿子出生后,不存在任何方式可以设定汽油价格,使得所有检查条件满足且价格在允许范围内。

样例 2

输入

8
1 2 3 4 5 8 6
3 7
2 6
3 8
5 10
5 8
2 9
3 8
6 8
4
1 3 7 6
4 1 5 7
1 7 7 1
1 8 2 7

输出

720
120
120
1

数据范围与提示

详细子任务附加限制及分值如下表所示。其中子任务 00 是样例。

子任务 分值 附加限制 子任务依赖 备注
11 1212 n300n \leq 300, m300m \leq 300 00
22 1010 n3000n \leq 3000, m3000m \leq 3000 pi=i1p_i = i - 1
33 99 0,1,20, 1, 2
44 1616 030 \sim 3 所有检查路径的总长度不超过 10810^{8}
55 1010 n100000n \leq 100000, m100000m \leq 100000 22 pi=i1p_i = i - 1
66 1212 2,52, 5
77 1313 n100000n \leq 100000, m100000m \leq 100000 03,50 \sim 3, 5
88 1818 070 \sim 7