贪吃的CWT loser题解

本文介绍了一道关于图论和最优化问题的题目,CWT需要在N家汉堡店中选择两家,使得在保留n-1条路径的情况下,其美味度之和除以路径总距离(欧几里得距离)的最大值。文章提供了输入输出样例,并给出了基于Prim算法的解决方案,但提示可以使用更高效的树剖或倍增方法来求解。
摘要由CSDN通过智能技术生成

题目描述

某天,cwt出去逛街,发现有有N家汉堡店,每两家汉堡店间都有一条双向道路。由于汉堡店太多了,cwt不知道该去哪家吃汉堡。汉堡店间的路太过于复杂,cwt决定只保留其中n-1条道路(必须保证每两家汉堡店间都连通),其它道路都无视掉。
经过一段时间的考虑,cwt准备吃光两家汉堡店(两家汉堡店在新图中必须有边)。
假设cwt吃光了a,b两家的汉堡,那么cwt就会得到A/B的愉悦度:
其中A=Pa+Pb(Pi是第i家汉堡店的美味度);
B=除了道路(a,b)外,所有道路的权值之和(道路的权值为两个汉堡店之间的欧几里德距离)。
欧几里得距离( Euclidean distance)也称欧式距离,它是一个通常采用的距离定义,它是在m维空间中两个点之间的真实距离。在二维和三维空间中的欧式距离的就是两点之间的距离,二维的公式是d = sqrt((x1-x2)^2+(y1-y2)^2)
Cwt想知道他最多得到的愉悦度是多少。

输入

输入文件loser.in的第一行包含一个整数N,表示汉堡店的个数。
输入文件接下来包含N行,每行包括三个整数X,Y,P,描述一个汉堡店的信息,其中(X,Y)为该汉堡店的直角坐标,P为该汉堡店的美味度,其中2<N≤1000,0≤X,Y≤1000,0<P<10000。

输出

最大的愉悦度(保留两位小数)。

样例输入

4
1 1 20
1 2 30
200 2 80
200 1 100

样例输出

65.00

提示

【样例解释】

我们保留(1,2),(3,4),(2,4)这3条边,并且选择(2,4)这条边,则A=30+100=130,B=1+1=2,A/B=65,可以证明不存在更大的解。

【数据规模】
N<=1000

想法

  • 显然是求一个最小生成树 枚举两个点 删除两点间任一树边

算法

  • 偷懒暴力写了prim+暴力求链
  • 其实应该用树剖或倍增来求LCA

代码

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值