QOJ.ac

QOJ

시간 제한: 2.0 s 메모리 제한: 1024 MB 총점: 100 해킹 가능 ✓

#17688. 维诺图

통계

图:基于欧几里得度量由 20 个点制作的沃罗诺伊图。来源:维基百科

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

在一次重要比赛中未能解决一道关于沃罗诺伊图的题目后,Minkyu 受到了极大的打击,开始每天借酒消愁!一个晴朗的下午,Minkyu 像往常一样喝着啤酒,突然发现了一种解决沃罗诺伊图的巧妙算法!在为此撰写论文之前,Minkyu 想出一道需要该算法的题目,以防止 2018 KAIST RUN Spring Contest 中出现满分获得者。

为什么 Minkyu 的沃罗诺伊图算法如此伟大?传统的沃罗诺伊图算法仅适用于笛卡尔坐标系,而 Minkyu 的算法适用于更广义的结构——“图”。考虑一个具有 $N$ 个顶点和 $M$ 条带正权重的边的连通图。当给你一个大小为 $K$ 的非空顶点子集时,该点集的“沃罗诺伊图”根据“该位置离集合中的哪个顶点最近?”这一标准来划分边上的所有位置。如果存在多个距离相等的点,则认为顶点编号最小的那个更近。

给你一个带权连通图和一个大小为 $K$ 的非空顶点子集。对于子集中的每个顶点,你应该计算以该顶点为“最近顶点”的边段总长度。解决这个问题,并比 Minkyu 更快地写出论文,来粉碎他的幻想吧!

输入格式

第一行包含两个空格分隔的整数,分别表示顶点数 $N$ 和边数 $M$。($1 \le N, M \le 250\,000$)

接下来的 $M$ 行中,每行包含三个空格分隔的整数,分别表示第 $i$ 条边的两个端点 $s_i$、$e_i$ 以及第 $i$ 条边的权重 $w_i$。($1 \le s_i, e_i \le N, 1 \le w_i \le 10^9$)

下一行包含一个整数,表示顶点子集的大小 $K$。($1 \le K \le N$)

下一行包含 $K$ 个按升序排列的互不相同的整数 $a_i$。每个整数表示子集中的顶点编号。($1 \le a_i \le N$)

你可以假设给定的图是连通的。换句话说,从任意顶点到其他任意顶点都存在一条路径。

输出格式

输出 $K$ 行,每行一个浮点数。第 $i$ 行输出以顶点 $a_i$ 为最近顶点的边段总长度。

所有输出的数字都应精确四舍五入到小数点后一位(详见样例输入/输出)。根据近期 ACM-ICPC 世界总决赛的趋势(需要高精度的浮点数处理),不允许有任何精度误差。

样例

输入样例 1

3 3
1 2 5
2 3 5
3 1 5
2
1 2

输出样例 1

7.5
7.5

输入样例 2

5 4
1 2 10
2 4 20
3 4 30
4 5 50
2
1 3

输出样例 2

80.0
30.0

输入样例 3

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

输出样例 3

10000000000.0

说明

这些是与每个样例测试相对应的示意图。

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.