#P15701. [2018 KAIST RUN Spring] Voronoi Diagram

[2018 KAIST RUN Spring] Voronoi Diagram

说明

:::align{center}

图:由 20 个点生成的 Voronoi 图,基于欧几里得度量。 :::

在笛卡尔坐标系中,我们将大小为 nn 的非空点集的 Voronoi 图 定义为一种按照“该位置离集合中哪个点最近?”这一准则划分平面的图表。例如,在上图中,平面上的每个位置都根据距离其最近的黑点进行了着色。存在一种在 O(nlog(n))O(n \log(n)) 时间内计算 Voronoi 图的算法,但该算法以极其复杂和困难而闻名。

在一次重要比赛中未能解决关于 Voronoi 图的问题后,Minkyu 大受打击,从此开始每天借酒浇愁!一个阳光明媚的下午,Minkyu 像往常一样喝着啤酒,突然发现了一种解决 Voronoi 图的巧妙算法!在撰写相关论文之前,Minkyu 想出一道需要该算法解决的题目,以防止任何人在 2018 年 KAIST RUN 春季竞赛中获得满分。

为什么 Minkyu 的 Voronoi 图算法如此出色?传统的 Voronoi 图算法仅适用于笛卡尔坐标系,但 Minkyu 的算法适用于更广义的结构——“图”。考虑一个具有 NN 个顶点和 MM 条带正权边的连通图。当给定一个大小为 KK 的非空顶点子集时,该点集的“Voronoi 图”会根据“该位置离集合中哪个顶点最近?”这一准则划分所有边上的位置。如果存在多个距离相等的点,则顶点编号最小的点被视为更近。

给定一个带权连通图和一个大小为 KK 的非空顶点子集。对于每个顶点,你需要计算“最接近”该给定顶点的边的总长度。解决这个问题,并比 Minkyu 更快地写出论文,以粉碎他的远大抱负!

输入格式

第一行包含两个由空格分隔的整数 NNMM,分别表示顶点数和边数。

接下来的 MM 行,每行包含三个由空格分隔的整数 si,ei,wis_i, e_i, w_i,表示第 ii 条边的两个端点 si,eis_i, e_i 以及该边的权重 wiw_i

接下来一行,包含一个整数 KK,表示顶点子集的大小。

接下来一行,按递增顺序给出 KK 个不同的整数 aia_i。每个整数表示子集中的顶点编号。

可以保证给定的图是连通的。换句话说,任意两个顶点之间都存在一条路径。

输出格式

输出 KK 行,每行一个十进制数。在第 ii 行,输出将顶点 aia_i 视为最近顶点的那部分边的长度总和。

所有输出的数字必须精确地四舍五入到小数点后第一位(请参考样例输入/输出以明确要求)。根据近期 ACM-ICPC 世界总决赛的趋势(要求高精度浮点数处理),不允许出现精度误差

3 3
1 2 5
2 3 5
3 1 5
2
1 2
7.5
7.5
5 4
1 2 10
2 4 20
3 4 30
4 5 50
2
1 3
80.0
30.0
11 10
1 2 1000000000
1 3 1000000000
1 4 1000000000
1 5 1000000000
1 6 1000000000
1 7 1000000000
1 8 1000000000
1 9 1000000000
1 10 1000000000
1 11 1000000000
1
1
10000000000.0

提示

以下是各样例测试对应的图示。

:::align{center}

:::

翻译由 DeepSeek V3.2 完成