#P9433. [NAPC-#1] Stage5 - Conveyors

    ID: 8643 远端评测题 2000ms 256MiB 尝试: 0 已通过: 0 难度: 4 上传者: 标签>O2优化树的遍历最近公共祖先,LCA

[NAPC-#1] Stage5 - Conveyors

题目背景

— rs8

题目描述

【简要题意】

给定一棵 nn 个节点的无根树以及树上的 kk 个关键节点,边有边权(即边的长度)。qq 次询问,每次给出 s,ts,t,问从 sstt 且经过至少一次每个关键节点的路径的最短长度。

【原始题意】

在某一面 kid 又遇到了往返跑关卡。Really popular apparently.

关卡给 kid 留下的空间形状是一棵无向带权树,边权即边的长度。这棵树有 nn 个节点,其中有 kk 个点上各有一个发光小球,kid 经过有小球的点(称为关键点)时就可以收集小球。kid 从 ss 点出发,当他收集到全部 kk 个小球时,传送门就会在 tt 点出现。

想速通的 kid 想知道他从 ss 点出发收集到全部 kk 个小球并进入位于 tt 点的传送门所需要走的最小时间(其实也就是路径长度,因为 kid 的速度恒定)。

但是 Geezer 很狡猾,塔内这一面被复制成了 qq 层,每层的 sstt 还可能有变动。kid 慌了,忙找到你求助。

输入格式

第一行三个正整数 n,q,kn, q, k,表示树的节点个数,询问次数和关键节点个数。

接下来 n1n-1 行,每行三个正整数 u,v,wu, v, w,表示树中存在边 (u,v)(u, v),边权为 ww。保证输入构成一棵树。

接下来一行 kk 个两两不同的正整数,表示关键节点的编号。

接下来 qq 行,每行两个正整数 s,ts, t,表示一次询问。

输出格式

对于每次询问输出一行一个非负整数,表示此次询问的最短合法路径长度。

注意,合法路径可以不经过任何边,此时路径长为 00

7 5 2
1 2 3
1 3 5
3 4 2
3 5 4
2 6 1
1 7 1
2 3
2 3
2 1
7 1
4 5
6 6
8
13
17
22
18

提示

【数据范围】

本题采用捆绑测试。

$$\def\r{\cr\hline} \def\None{\text{None}} \def\arraystretch{1.5} \begin{array}{c|c|c|c} \textbf{Subtask} & \text{测试点编号} & \textbf{Sp. Constraints} & \textbf{Score}\r \textsf1&1\sim14 & n\leqslant15,\mathbf R& 18 \r \textsf2&15\sim20 & q=1 & 18 \r \textsf3&46\sim48 & s=t,k=n & 6 \r \textsf4&21\sim25 & k=n & 18 \r \textsf5&26\sim30 & \mathbf A & 18 \r \textsf6&31\sim45 & - & 22 \r \end{array} $$

友情提醒:Subtask 1\text{Subtask }\textsf1 并没有限制 qq 的范围。

  • 特殊性质 R\mathbf R:保证树随机生成(对于 i2i\ge2,在 [1,i)[1,i) 内随机选择一个点和 ii 连边,边权在一固定区间内均匀随机生成)。
  • 特殊性质 A\mathbf A:定义 f(x)f(x) 表示存在 i,j[1,n]i,j\in[1,n](可能 i=ji=j) 且 i,ji,j 均为关键点,使得 xxiijj 的最短路径上;那么对每次询问保证 f(s)f(s)f(t)f(t) 均成立。

对于 100%100\% 的数据,1n1051\leqslant n\leqslant 10^51q1051\leqslant q\leqslant 10^51kn1\leqslant k\leqslant n1w1041\leqslant w\leqslant 10^41u,v,s,tn1\leqslant u,v,s,t\leqslant n

【样例解释 #1】

图中加粗节点表示关键点。

对于每组询问,以下为一种最优路径(最优路径可能有多条):

  1. 2132\to1\to3
  2. 21312\to1\to3\to1
  3. 7121317\to1\to2\to1\to3\to1
  4. 43121354\to3\to1\to2\to1\to3\to5
  5. 62131266\to2\to1\to3\to1\to2\to6