题目大意:给出一个图,求某点到某点所必须忍受的最小噪音(即所经过路径的相邻两点的权的最大值最小)。

中文翻译

题目链接

题目类型:图论 / Floyd

 

题目分析:

①虽然做的是图论专题,但是开始还是觉得可以dp(后来证明我之前没有充分理解所谓“松弛技术”)。结果是写了一个可以过样例但是wa的dp。于是后来分析,关键点是两个相邻指标值,它们是相互依赖的,具体的说,假设有1点和2点它们相邻,则算d1的值时要根据d2的值算一次,但是d2的值也是要依赖d1的,所以这样解出来的不会是正确的结果。于是,我真正体会到了松弛技术(relax)的神奇之处。它可以把两个相互依赖的值慢慢收紧(得最小值)。

 

②Floyd。想到是Floyd的时候,算法便不难写出了。d[i][j]表示的是i点到j点要忍受的最小噪音,然后只需在松弛处稍作改动,把一般的          d[i][k]+d[k][j]换成max(d[i][k], d[k][j]),即d[i][j] = min(d[i][j], max(d[i][k], d[k][j])); 即可。

另外,“//if(d[i][k] < INF && d[k][j]<INF)    //加这个判断,可以解决INF相加可能溢出的问题.” 本来需要的,但是现在不是相加而是求max,所以可以不用判断。

 

代码:

错误的dp,贴出来引以为戒。(= =)

Floyd