CF1583H Omkar and Tours

题目描述

Omkar 正在组织他的国家 Omkarland 的旅游团!Omkarland 有 $n$ 个城市,奇特的是,这些城市之间恰好有 $n-1$ 条双向道路相连。保证任意两个城市之间都可以通过道路网络互相到达。 每个城市都有一个欢乐值 $e$。每条道路都有一个容量 $c$,表示该道路上最多可以同时通过的车辆数,以及一个通行费 $t$。然而,Omkarland 的收费系统有一个有趣的特点:如果一辆车在一次旅途中经过了多条道路,他们只需支付所经过道路中通行费最高的那一条的费用(即支付所有经过道路的 $t$ 的最大值)。如果车辆没有经过任何道路,则无需支付通行费。 Omkar 决定组织 $q$ 个旅游团。每个旅游团由 $v$ 辆车组成,起点为城市 $x$。(请注意,只有容量 $\geq v$ 的道路才能被该旅游团通过。)作为组织者,Omkar 希望他的团队能尽可能多地享受乐趣,但同时也必须为他们报销通行费。因此,对于每个旅游团,Omkar 想知道两件事:首先,该旅游团从起点城市出发,能够到达的城市中欢乐值最大的城市的欢乐值是多少;其次,Omkar 需要为整个团队报销的每辆车的通行费是多少?(从 $x$ 到 $y$ 的行程总是选择最短路径。) 如果有多个可达城市的欢乐值相同且最大,Omkar 会让旅游团自行选择。因此,为了应对所有可能的情况,他需要知道无论团队选择哪个城市,自己都需要为团队报销的最大金额。

输入格式

第一行包含两个整数 $n$ 和 $q$($2 \leq n \leq 2 \cdot 10^5$,$1 \leq q \leq 2 \cdot 10^5$),分别表示城市数量和旅游团数量。 第二行包含 $n$ 个整数 $e_1, e_2, \ldots, e_n$($1 \leq e_i \leq 10^9$),其中 $e_i$ 表示第 $i$ 个城市的欢乐值。 接下来的 $n-1$ 行,每行包含四个整数 $a$、$b$、$c$ 和 $t$($1 \leq a,b \leq n$,$1 \leq c \leq 10^9$,$1 \leq t \leq 10^9$),表示城市 $a$ 和城市 $b$ 之间有一条容量为 $c$、通行费为 $t$ 的道路。 接下来的 $q$ 行,每行包含两个整数 $v$ 和 $x$($1 \leq v \leq 10^9$,$1 \leq x \leq n$),表示旅游团的车辆数和起点城市编号。

输出格式

输出 $q$ 行。第 $i$ 行输出两个整数:该旅游团能够到达的城市中最大欢乐值,以及 Omkar 需要为该旅游团每辆车报销的最大通行费。

说明/提示

下图为第一个样例的地图。节点中未加粗的数字为编号,加粗的数字为欢乐值。边上的未加粗数字为容量,加粗数字为通行费。 ![](https://cdn.luogu.com.cn/upload/vjudge_pic/CF1583H/5086f7eeb8bc4933d6a72b8178b1c2b0de20b6ed.png) 对于第一个询问,1 辆车从城市 3 出发,可以到达城市 1、2、3、4、5。最大欢乐值为 3。如果团队选择去城市 4,Omkar 需要为每辆车报销 8 元通行费,这是最大值。 对于第二个询问,9 辆车从城市 5 出发,只能到达城市 5。最大欢乐值仍为 3,Omkar 需要报销 0 元。 对于第三个询问,6 辆车从城市 2 出发,可以到达城市 2 和 4。最大欢乐值为 3。如果团队选择去城市 4,Omkar 需要为每辆车报销 2 元通行费,这是最大值。 下图为第二个样例的地图: ![](https://cdn.luogu.com.cn/upload/vjudge_pic/CF1583H/afb6838e2139f1b619fb5d324b31f7d86d4a3c92.png) 对于第一个询问,5 辆车从城市 1 出发,只能到达城市 1。最大欢乐值为 1,Omkar 需要报销 0 元。 对于第二个询问,4 辆车从城市 1 出发,可以到达城市 1 和 2。最大欢乐值为 2,Omkar 需要报销 1 元。 对于第三个询问,3 辆车从城市 1 出发,可以到达城市 1、2、3。最大欢乐值为 3,Omkar 需要报销 1 元。 对于第四个询问,2 辆车从城市 1 出发,可以到达城市 1、2、3、4。最大欢乐值为 4,Omkar 需要报销 1 元。 对于第五个询问,1 辆车从城市 1 出发,可以到达城市 1、2、3、4、5。最大欢乐值为 5,Omkar 需要报销 1 元。 由 ChatGPT 4.1 翻译