#P12577. [UOI 2021] 树上的强盗

    ID: 14145 远端评测题 1000ms 256MiB 尝试: 0 已通过: 0 难度: 6 上传者: 标签>线段树2021树链剖分UOI(乌克兰)

[UOI 2021] 树上的强盗

题目描述

nn 个城市,编号从 11nn。所有城市通过 n1n-1 条道路连接,形成一个连通图。每条道路都有特定的长度。

已知编号为 ii 的城市在时间 tit_i 被编号为 aia_i 的强盗团伙占领(1ain1 \leq a_i \leq n)。从被占领的时刻 tit_i 开始(包括 tit_i 时刻),只有 aia_i 号团伙的成员才能通过该城市。

你需要回答 mm 个如下形式的查询:

  • u v b T:判断编号为 bb 的团伙成员能否在时间 TT 从城市 uu 前往城市 vv。如果无法完成旅程,还需要输出路径上第一个无法通过的城市编号。在城市间移动需要花费时间,时间等于路的长度。

输入格式

第一行包含一个整数 nn2n1052 \leq n \leq 10^5)——城市数量。

接下来的 n1n-1 行,每行包含两个整数 pip_idid_i1pi<i1 \leq p_i < i1di1031 \leq d_i \leq 10^3),表示城市 iipip_i 之间有一条长度为 did_i 的道路。编号从 2 开始。

下一行包含 nn 个整数 aia_i1ain1 \leq a_i \leq n),表示占领每个城市的强盗团伙编号。

下一行包含 nn 个整数 tit_i1ti1091 \leq t_i \leq 10^9),表示每个城市被占领的时间。

下一行包含一个整数 mm1m1051 \leq m \leq 10^5)——查询数量。

最后 mm 行,每行包含四个整数 uiu_i, viv_i, bib_i, TiT_i1ui,vi,bin1 \leq u_i, v_i, b_i \leq n1Ti1091 \leq T_i \leq 10^9),分别表示查询的起点城市、终点城市、团伙编号和出发时间。

输出格式

对于每个查询,输出一行一个整数——路径上第一个无法通过的城市编号。如果全程可通行,输出 -1

注意本题输入输出数据量较大,建议使用快速的输入输出方法,例如:

  • C++ 中使用 scanf/printf 而非 cin/cout
  • Python 中使用 sys.stdin.readline 而非 input
  • 建议使用 PyPy 解释器运行 Python 代码。
5
1 7
1 3
2 2
2 1
1 1 2 3 3
10 4 15 15 1
8
5 3 3 1
5 3 3 2
5 3 3 3
5 3 1 1
4 3 1 2
4 3 1 3
3 4 1 3
2 1 1 100
-1
1
2
5
-1
3
4
-1
5
1 4
1 1
1 1
1 4
3 2 2 2 2
4 4 6 7 5
5
5 2 4 7
1 1 1 3
4 2 1 9
1 4 3 7
3 4 2 4
5
-1
4
4
1
5
1 4
2 1
3 3
4 1
2 1 2 3 2
8 3 7 7 9
5
1 5 2 4
1 2 1 4
5 2 1 6
1 4 3 5
1 5 4 7
2
-1
4
2
2

提示

评分标准

  1. 77 分):所有 pi=1p_i = 1
  2. 99 分):n,m103n, m \leq 10^3
  3. 1111 分):pi=i1p_i = i-1ti=1t_i = 1
  4. 1818 分):pi=i1p_i = i-1ai=1a_i = 1bi=2b_i = 2
  5. 1515 分):pi=i1p_i = i-1
  6. 1111 分):ti=1t_i = 1
  7. 1717 分):ai=1a_i = 1bi=2b_i = 2
  8. 1212 分):无额外限制。

翻译由 DeepSeek V3 完成