QOJ.ac

QOJ

Time Limit: 7 s Memory Limit: 1024 MB Total points: 100

#6101. 环形公路

Statistics

KOI 市由 $N$ 个交叉路口和 $N-1$ 条双向道路组成。你只能通过给定的道路在两个不同的交叉路口之间通行。换句话说,该市的道路网络构成了一棵树。道路位于二维平面上,且除了端点外,两条道路不会在其他位置相交。每条道路都有一个非负整数权重,代表通过该道路所需的时间。

KOI 市在几十年前还是一个小镇,但随着人口的涌入,它开始迅速扩张。在快速扩张的过程中,为了方便管理,市长将交叉路口编号为 $1$ 到 $N$。该编号系统满足以下性质:

  • 交叉路口 $1$ 是城市的中心,且至少连接了 $2$ 条道路。
  • 分配给交叉路口的编号构成了以交叉路口 $1$ 为根的树的一种先序遍历:对于任何子树,其根节点的编号是该子树中最小的编号。
  • 对于每个交叉路口,考虑所有相邻(直接通过道路连接)的交叉路口中编号最小的一个。当你从这个交叉路口开始,按逆时针顺序排列所有相邻的交叉路口时,它们的编号是递增的。

随着大量人口涌入 KOI 市,交通拥堵问题日益严重。为了解决这个问题,市长用外环路连接了最外围的城市。设 $\{v_1, v_2, \dots, v_k\}$ 为所有恰好连接一条道路的交叉路口的编号,按递增顺序排列。对于每个 $1 \le i \le k$,市长在交叉路口 $v_i$ 和交叉路口 $v_{(i \bmod k)+1}$ 之间修建了一条双向道路。每条道路的权重为非负整数 $w_i$。由于编号系统的特性,你可以观察到,外环路可以在二维平面上添加,使得两条道路除了端点外在任何位置都不相交。

你正在尝试为 KOI 市构建一个导航系统。该导航系统需要回答 $Q$ 个形如 $(u, v)$ 的查询。对于每个查询,导航系统应返回从交叉路口 $u$ 到交叉路口 $v$ 所需的最短时间。通过路径移动的时间等于路径中各边权重的总和。

给定道路网络结构,编写一个程序来高效地回答 $Q$ 个查询。

输入格式

第一行包含 KOI 市的交叉路口数量 $N$ ($4 \le N \le 100\,000$)。

接下来的 $N-1$ 行,每行包含两个空格分隔的整数 $p_i$ 和 $c_i$。它们表示存在一条连接交叉路口 $p_i$ 和交叉路口 $i+1$ 的权重为 $c_i$ 的双向道路 ($1 \le p_i \le i, 0 \le c_i \le 10^{12}$)。

设 $k$ 为原树中恰好连接一条道路的交叉路口数量,设 $\{v_1, v_2, \dots, v_k\}$ 为它们编号的递增序列。下一行给出 $k$ 个空格分隔的整数 $w_1, w_2, \dots, w_k$。这表示连接交叉路口 $v_i$ 和交叉路口 $v_{(i \bmod k)+1}$ 的外环路权重为 $w_i$ ($0 \le w_i \le 10^{12}$)。

下一行包含查询数量 $Q$ ($1 \le Q \le 250\,000$)。

接下来的 $Q$ 行,每行包含两个整数 $u$ 和 $v$,表示感兴趣的交叉路口 ($1 \le u, v \le N$ 且 $u \neq v$)。

输出格式

对于每个查询,打印一行,包含一个整数:从 $u$ 到 $v$ 的最短移动时间。

样例

样例输入 1

4
1 9
1 8
1 0
9 9 9
6
1 2
1 3
1 4
2 3
2 4
3 4

样例输出 1

9
8
0
9
9
8

样例输入 2

11
1 9
1 8
3 0
4 7
4 1
3 6
1 0
8 7
8 1
10 6
0 0 0 0 0 0
21
1 2
1 3
1 4
1 5
1 6
1 7
1 8
1 9
1 10
1 11
7 1
8 2
9 3
10 4
11 5
1 6
2 7
3 8
4 9
5 10
6 11

样例输出 2

7
8
8
7
7
7
0
7
1
7
7
7
1
7
0
7
0
8
1
6
0

样例输入 3

11
1 9
1 8
3 0
4 7
4 1
3 6
1 0
8 7
8 1
10 6
1000000000000 1000000000000
1000000000000 1000000000000
1000000000000 1000000000000
21
1 2
1 3
1 4
1 5
1 6
1 7
1 8
1 9
1 10
1 11
7 1
8 2
9 3
10 4
11 5
1 6
2 7
3 8
4 9
5 10
6 11

样例输出 3

9
8
8
15
9
14
0
7
1
7
14
9
15
9
22
9
23
8
15
16
16

说明

在第三个样例中,包含 $w_1, w_2, \dots, w_k$ 的行(红色部分)为了可读性被拆分成了多行。

左图对应第一个样例。右图对应第二个和第三个样例。

Editorials

IDTypeStatusTitlePosted ByLast UpdatedActions
#527Editorial Open集训队作业 解题报告 by 卢华睿Qingyu2026-01-02 21:47:51 Download

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.