【ACM小思】一道魔改费用流引发的思考

魔改费用流一道

n个城市,p条双向道路把这些城市连接起来,一对城市之间可能有多条道路连接。FJ要找到t条从城市1到城市n的路径,不同的路径不能包含相同的道路。在这一前提条件下,FJ希望所有路径中经过的最长的道路最短。

​ 乍一看是一个网络流的问题

​ 路径不能重复,那就把边的容量当做1,最后求汇点流量为t的情况,增广的过程其实就是找路的过程。

但问题是怎么求出最短的最长边权?一种朴素的想法是二分答案,让所有边权超出要求的边断流,然后验证条件就是最大流是否大于t。

​ 已经是个不错的算法了。

​ 但是,我们还可以做得更好!

​ 还记得费用流是怎么做的吗?从源到汇不断找最短路,找到一次增广一次。而最短路的性质是“找出路径上所有边权的和”,但是我们这里想要的是保证这两个点之间的最大边权最短。

​ 最小生成树?

​ 对,实际上无论是最短路和最小生成树,都是求出“满足特定性质的路径”的一种方法。

​ 那我们不妨把最小费用流改一改?就像我们之前对最短路做的拓展思考一样。

​ 正解,就是如此。

posted @ 2017-08-13 21:04  K.Nick  阅读(150)  评论(0编辑  收藏  举报
$a = (1-\sin(\theta))$