P1743 Audiophobia

557 阅读1分钟

image.png

image.png

image.png

image.png

解题思路:

本题的做法十分简单:直接用floyd算法,但是要把加法改成min,min改成max。为什么可以

这样做呢?不管是floyd算法还是dijkstra算法,都是基于这样一个事实:对于任意一条至少包含两条边的路

径i->j,一定存在一个中间点k,使得i->j的总长度等于i->k与k->j的长度之和。对于不同的点k,i->k和

k->j的长度之和可能不同,最后还需要取一个最小值才是i->j的最短路径。把刚才的推理中“之和”与“取最小值”

换成“取最小值”和“取最大值”,推理仍然适用。这个是白书的经典做法,还有另外一种方法是Kruskal离线的

做法,可以看这个博客:这里

只写了Floyd变形的写法,Kruskal的写法就没写了。

Kruskal的写法:

blog.csdn.net/shuangde800…

Floyd算法:

blog.csdn.net/yuewenyao/a…