arc026_4 题解
翻译:
有
有一天,一场大规模的灾难摧毁了所有的道路,使得村庄之间的交通无法进行。你需要修复一些道路,将这几个村庄连接起来。
您首先估计了修理每条道路所需的费用和时间。然后计算出最低小时工资。
「小时工资」是指「修路所需费用的总和」除以「工作总时长(单位:小时)」,即
请注意,不一定要修理所有的道路,也可以修理不需要的道路,只要将村庄连接起来即可。
保证图联通,且没有自环,重边。
根据题目的描述,一条边对
也许,在一定程度上,是可以对比两条边的贡献。
于是,一开始我便想到一种做法,选择所有
能保证正确性的一个显然的结论是:
但是,这显然是错的。反例:对于一条边
为什么?有一条式子(不妨
代入到
由于题目并未保证
所以有:
观察到
所以并不是所有
考虑到这不好维护,转换以下思路。
不能够通过
如何将判断贡献转换为整式的判断呢?
考虑二分最终
但是,我们如何判断一个
由于我们的目标是判断是否能构造
那么,处理为整式之后,只需要判断当前选择
通过这个变换可以将判断目标变为正负代价的简单判断。
对于每一条边,我们让 整合代价
若
那么就可以对边按
如果跑出的生成树结果与之前选择负数贡献边的贡献之和小于等于
注意!这里的判断只能判断对应
时间复杂度: