#zXSCSlydlt60x6203. 沙漠之王 最优比率生成树
沙漠之王 最优比率生成树
好的,这是整理好的题面,不含解题思路,只包含样例解释。
题目描述
大卫大帝建立了一个沙漠帝国,为了赢得人民的尊重,他决定在全国各地建立渠道,为每个村庄提供水源。
与首都相连的村庄将得到水资源浇灌。
他希望构建渠道,使得 单位长度的平均成本降至最低。
即:渠道的总成本与总长度的比值最小。
他只希望建立必要的渠道,为所有村庄供水,这意味着每个村庄都有且仅有一条路径连接至首都(即形成以首都为根的树)。
工程师调查发现:
- 所有渠道必须直接在两个村庄之间水平建造。
- 任意两个村庄的高度均不同,每个渠道都需要一个垂直升降机,使得水能够上升或下降。
- 建设渠道的成本只和升降机的高度差有关(即两个村庄的高度差)。
- 不同渠道之间不能共享升降机。
输入格式
输入包含多组测试数据。
每组测试数据第一行包含整数 ,表示村庄(包括首都)总数。
接下来 行,每行三个整数 ,描述一个村庄的位置坐标 和高度 。
第一个被描述的村庄即为首都。
当输入一行为 时,表示输入终止。
输出格式
每组数据输出一个结果,每个结果占一行。
结果为一个保留三位小数的实数,表示渠道的总成本与总长度的比值的最小值。
数据范围
输入样例
4
0 0 0
0 1 1
1 1 2
1 0 3
0
输出样例
1.000
样例解释
村庄信息(包括首都):
- 首都:位置 (0,0),高度 0
- 村庄 2:位置 (0,1),高度 1
- 村庄 3:位置 (1,1),高度 2
- 村庄 4:位置 (1,0),高度 3
渠道成本 = 连接两个村庄的高度差的绝对值。
渠道长度 = 两个村庄之间的平面欧几里得距离。
我们要找一棵生成树(以首都为根),使得 $\frac{\sum |z_u - z_v|}{\sum \sqrt{(x_u - x_v)^2 + (y_u - y_v)^2}}$ 最小。
计算示例(非唯一最优解,仅解释为何可能是 1.000):
连接首都 (0,0,0) 与村庄 2 (0,1,1):
成本 = |0-1| = 1,长度 = |0-0|+|1-0|? 不对,欧几里得距离 = 1。
比值 = 1/1 = 1.0
连接村庄 2 (0,1,1) 与村庄 3 (1,1,2):
成本 = |1-2| = 1,长度 = 1,比值 = 1.0
连接村庄 3 (1,1,2) 与村庄 4 (1,0,3):
成本 = |2-3| = 1,长度 = 1,比值 = 1.0
总成本 = 1+1+1=3,总长度 = 1+1+1=3,比值 = 3/3 = 1.000。
这个方案确实是一棵树(4个点3条边),并且连通所有村庄(首都 0 → 村庄 2 → 村庄 3 → 村庄 4)。
可以验证,在这个例子中,无论怎么选树,比值都可能是 1.000(因为每个边的成本/长度恰好都是 1),因此输出 1.000。
注意:本题的答案要求保留三位小数输出。