[CSP-S 2022] 数据传输 P8820
小 C 正在设计计算机网络中的路由系统。
测试用的网络总共有 n n n 台主机,依次编号为 1 ∼ n 1 \sim n 1 ∼ n 。这 n n n 台主机之间由 n − 1 n - 1 n − 1 根网线连接,第 i i i 条网线连接个主机 a i a_i a i 和 b i b_i b i 。保证任意两台主机可以通过有限根网线直接或者间接地相连。受制于信息发送的功率,主机 a a a 能够直接将信息传输给主机 b b b 当且仅当两个主机在可以通过不超过 k k k 根网线直接或者间接的相连。
在计算机网络中,数据的传输往往需要通过若干次转发。假定小 C 需要将数据从主机 a a a 传输到主机 b b b (a ≠ b a \neq b a = b ),则其会选择出若干台用于传输的主机 c 1 = a , c 2 , … , c m − 1 , c m = b c_1 = a, c_2, \ldots, c_{m - 1}, c_m = b c 1 = a , c 2 , … , c m − 1 , c m = b ,并按照如下规则转发:对于所有的 1 ≤ i < m 1 \le i < m 1 ≤ i < m ,主机 c i c_i c i 将信息直接发送给 c i + 1 c_{i + 1} c i + 1 。
每台主机处理信息都需要一定的时间,第 i i i 台主机处理信息需要 v i v_i v i 单位的时间。数据在网络中的传输非常迅速,因此传输的时间可以忽略不计。据此,上述传输过程花费的时间为 ∑ i = 1 m v c i \sum_{i = 1}^{m} v_{c_i} ∑ i = 1 m v c i 。
现在总共有 q q q 次数据发送请求,第 i i i 次请求会从主机 s i s_i s i 发送数据到主机 t i t_i t i 。小 C 想要知道,对于每一次请求至少需要花费多少单位时间才能完成传输。
输入数据格式
输入的第一行包含三个正整数 n , Q , k n, Q, k n , Q , k ,分别表示网络主机个数,请求个数,传输参数。数据保证 1 ≤ n ≤ 2 × 10 5 1 \le n \le 2 \times {10}^5 1 ≤ n ≤ 2 × 10 5 ,1 ≤ Q ≤ 2 × 10 5 1 \le Q \le 2 \times {10}^5 1 ≤ Q ≤ 2 × 10 5 ,1 ≤ k ≤ 3 1 \le k \le 3 1 ≤ k ≤ 3 。
输入的第二行包含 n n n 个正整数,第 i i i 个正整数表示 v i v_i v i ,保证 1 ≤ v i ≤ 10 9 1 \le v_i \le {10}^9 1 ≤ v i ≤ 10 9 。
接下来 n − 1 n - 1 n − 1 行,第 i i i 行包含两个正整数 a i , b i a_i, b_i a i , b i ,表示一条连接主机 a i , b i a_i, b_i a i , b i 的网线。保证 1 ≤ a i , b i ≤ n 1 \le a_i, b_i \le n 1 ≤ a i , b i ≤ n 。
接下来 Q Q Q 行,第 i i i 行包含两个正整数 s i , t i s_i, t_i s i , t i ,表示一次从主机 s i s_i s i 发送数据到主机 t i t_i t i 的请求。保证 1 ≤ s i , t i ≤ n 1 \le s_i, t_i \le n 1 ≤ s i , t i ≤ n ,s i ≠ t i s_i \ne t_i s i = t i 。
输出数据格式
Q Q Q 行,每行一个正整数,表示第 i i i 次请求在传输的时候至少需要花费多少单位的时间。
输入输出样例
输入 #1Copy 输出 #1 7 3 3 1 2 3 4 5 6 7 1 2 1 3 2 4 2 5 3 6 3 7 4 7 5 6 1 2 12 12 3
说明与提示
【样例解释 #1】
对于第一组请求,由于主机 4 , 7 4, 7 4 , 7 之间需要至少 4 4 4 根网线才能连接,因此数据无法在两台主机之间直接传输,其至少需要一次转发;我们让其在主机 1 1 1 进行一次转发,不难发现主机 1 1 1 和主机 4 , 7 4, 7 4 , 7 之间都只需要两根网线即可连接,且主机 1 1 1 的数据处理时间仅为 1 1 1 ,为所有主机中最小,因此最少传输的时间为 4 + 1 + 7 = 12 4 + 1 + 7 = 12 4 + 1 + 7 = 12 。
对于第三组请求,由于主机 1 , 2 1, 2 1 , 2 之间只需要 1 1 1 根网线就能连接,因此数据直接传输就是最优解,最少传输的时间为 1 + 2 = 3 1 + 2 = 3 1 + 2 = 3 。
【样例 #2】
见附件中的 transmit/transmit2.in
与 transmit/transmit2.ans
。
该样例满足测试点 2 2 2 的限制。
【样例 #3】
见附件中的 transmit/transmit3.in
与 transmit/transmit3.ans
。
该样例满足测试点 3 3 3 的限制。
【样例 #4】
见附件中的 transmit/transmit4.in
与 transmit/transmit4.ans
。
该样例满足测试点 20 20 20 的限制。
【数据范围】
对于所有的测试数据,满足 1 ≤ n ≤ 2 × 10 5 1 \le n \le 2 \times {10}^5 1 ≤ n ≤ 2 × 10 5 ,1 ≤ Q ≤ 2 × 10 5 1 \le Q \le 2 \times {10}^5 1 ≤ Q ≤ 2 × 10 5 ,1 ≤ k ≤ 3 1 \le k \le 3 1 ≤ k ≤ 3 ,1 ≤ a i , b i ≤ n 1 \le a_i, b_i \le n 1 ≤ a i , b i ≤ n ,1 ≤ s i , t i ≤ n 1 \le s_i, t_i \le n 1 ≤ s i , t i ≤ n ,s i ≠ t i s_i \ne t_i s i = t i 。
测试点 n ≤ n \le n ≤ Q ≤ Q \le Q ≤ k = k = k = 特殊性质 1 1 1 10 10 10 10 10 10 2 2 2 是 2 2 2 10 10 10 10 10 10 3 3 3 是 3 3 3 200 200 200 200 200 200 2 2 2 是 4 ∼ 5 4 \sim 5 4 ∼ 5 200 200 200 200 200 200 3 3 3 是 6 ∼ 7 6 \sim 7 6 ∼ 7 2000 2000 2000 2000 2000 2000 1 1 1 否 8 ∼ 9 8 \sim 9 8 ∼ 9 2000 2000 2000 2000 2000 2000 2 2 2 否 10 ∼ 11 10 \sim 11 10 ∼ 11 2000 2000 2000 2000 2000 2000 3 3 3 否 12 ∼ 13 12 \sim 13 12 ∼ 13 2 × 10 5 2 \times {10}^5 2 × 10 5 2 × 10 5 2 \times {10}^5 2 × 10 5 1 1 1 否 14 14 14 5 × 10 4 5 \times {10}^4 5 × 10 4 5 × 10 4 5 \times {10}^4 5 × 10 4 2 2 2 是 15 ∼ 16 15 \sim 16 15 ∼ 16 10 5 {10}^5 10 5 10 5 {10}^5 10 5 2 2 2 是 17 ∼ 19 17 \sim 19 17 ∼ 19 2 × 10 5 2 \times {10}^5 2 × 10 5 2 × 10 5 2 \times {10}^5 2 × 10 5 2 2 2 否 20 20 20 5 × 10 4 5 \times {10}^4 5 × 10 4 5 × 10 4 5 \times {10}^4 5 × 10 4 3 3 3 是 21 ∼ 22 21 \sim 22 21 ∼ 22 10 5 {10}^5 10 5 10 5 {10}^5 10 5 3 3 3 是 23 ∼ 25 23 \sim 25 23 ∼ 25 2 × 10 5 2 \times {10}^5 2 × 10 5 2 × 10 5 2 \times {10}^5 2 × 10 5 3 3 3 否
特殊性质:保证 a i = i + 1 a_i = i + 1 a i = i + 1 ,而 b i b_i b i 则从 1 , 2 , … , i 1, 2, \ldots, i 1 , 2 , … , i 中等概率选取。
transmit.zip
*练习笔记 暂无人完成练习,做第一个完成练习的人—-first blood ! 我要练习