Luogu P2269 [HNOI2002]高质量的数据传输
这题给大家提供一下思路~ (为不想贴代码找借口)
声明:两个思路都是正确的,并且都AC了。(逃)
总体布局
求传输失败率\(1-\prod(1-p_{i})\)最小就是求 传输成功率\(\prod(1-p_{i})\)最大。
求一个最短路,使得传输成功率(1-失败率)最大为第一关键字,时延最小为第二关键字。
思路1
正如另一篇题解的思路,我们可以稍微改变一下传统的spfa:
在松弛操作时,如果传输效率更好,则松弛传输效率及该效率下对应的时延。如果传输效率一致,则只松弛该效率下对应的时延。如果传输效率更差,什么都不更新。
这样就能保证两个关键字的次序。
思路2(次好)
我们可以先spfa一下传输成功率,再spfa时延。
在spfa时延时,松弛时的判断是否更新的条件语句中加一个判断 (成功率[u]*(1-丢失率边[u][v])==成功率[v])
也就是可以理解为,沿着传输成功率最大的边(符合第一关键字的边)来更新各个节点的时延。
这样也可以。
后记
这题是我时隔了半年两次写的题目。那时是思路2,还没写对,只有10分,现在有了两个思路。不同的水平,果然有不同的感悟。算法有时候,还真的是一门值得研究的艺术。