P16182 [ICPC 2014 NAIPC] Super Mario 169

题目描述

Siggy 是一名狂热的电子游戏爱好者,他最近在玩《超级马里奥 169》(这是更受欢迎的《超级马里奥 64》之后一款非常小众的续作)。这款游戏完全发生在一片海洋中,可以用三维坐标系来建模。玩家的目标是扮演主角马里奥,在水中游动并收集所有金币,金币最多可达 169 枚。 然而,这些金币并不是简单地摆在那里!相反,有多达 13 个开关,马里奥可以通过触摸它们来按下。按下任何一个开关都会导致最多 13 枚金币出现。此外,每个开关只能被按下一次,并且当它被按下时,任何其他未被收集的金币(这些金币是由之前按下的开关揭示的,如果有的话)都会消失,这意味着马里奥将来将无法收集它们。所有开关和金币都足够小,可以视为点。 为了确保他以最优化方式玩游戏,Siggy 想知道收集所有金币所需的最短可能距离。

输入格式

输入中有多个测试用例。每个测试用例的第一行包含四个整数: $n$ $mx$ $my$ $mz$ 其中 $n$($1 \leq n \leq 13$)是开关的数量,三维点 $(mx, my, mz)$ 是马里奥的起始点。 然后,以下模式重复 $n$ 次,每个开关一次。该模式以一行四个整数开始: $k$ $sx$ $sy$ $sz$ 其中 $k$($1 \leq k \leq 13$)是由该开关激活的金币数量,三维点 $(sx, sy, sz)$ 是该开关所在的位置。接下来是 $k$ 行,每行三个整数: $cx$ $cy$ $cz$ 其中 $(cx, cy, cz)$ 是由该开关激活的某个金币的三维坐标。 所有点的坐标 $x$、$y$、$z$ 均在 $-1{,}000 \leq x, y, z \leq 1{,}000$ 范围内,并且一个测试用例中的所有点(包括马里奥的起点、开关和金币)都是唯一的。输入以一行四个 0 结束。 输入数据约 60 KB。

输出格式

对于每个测试用例,输出一个数字,表示马里奥为了收集所有金币所需旅行的最短距离,精确到两位小数(四舍五入)。每个数字输出在自己的行上,不要包含空格。输出之间不要打印空行。

说明/提示

翻译由 DeepSeek V3.2 完成