这题分层图为什么不能用dijkstra?

P1948 [USACO08JAN] Telephone Lines S

鸡你太美
by dfgfdfg @ 2022-10-27 17:38:03


@[dfgfdfg](/user/853509) 你他妈的不会说话把手剁下来连着键盘送给山区小朋友行吗?
by Register_int @ 2022-10-27 17:45:26


@[Retr0_Gu](/user/535407) 可以用dij 吧,我这么写过了
by 阴语飞 @ 2022-11-01 16:08:34


@[阴语飞](/user/297103) 用的二分还是分层图
by Retr0_Gu @ 2022-11-01 18:58:13


@[Retr0_Gu](/user/535407) 分层图一次 二分+分层图一次(第一次提交这样搞的过了,看题解分层图就没必要二分了,又把二分去了单独交了一次分层图)都是dij
by 阴语飞 @ 2022-11-01 19:17:43


但是分层图dij 更新需要取max而不是dis[k]=dis[x]+len
by 阴语飞 @ 2022-11-01 19:18:47


如果不能用dij有可能是因为有后效性,如果用spfa迭代几次可能会可以
by 966123anyunchuan @ 2022-11-03 22:24:12


考古+实践证明可以dij
by w9095 @ 2023-03-03 19:14:08


可以用的,如果把这题往动态规划想(f[u][j]表示 1 号点到 u 号点,使用了 j 次免费升级的机会后,路径上花费的最大值的最小值) 这题dij和spfa在处理后效性这个问题上有区别的: + spfa是通过迭代多次计算,把“答案收敛出来” + dij是用了这道题的单调特性,求的是路径上最大花费的最小值,那我们就把 1 到 u 的距离定义为“1 到 u 的路径中的最大花费”,如果我们能求出距离的最小值(即最短路),就能解决这个问题 这个“距离”也是有单调性的:由于边权非负,所以就代表着 u 去扩展 v 时,1 到 v 的路径中的最大花费只可能变大,所以当前队列中最小的那个点所代表的状态一定是一个最优状态(最短的状态,最大花费最小的状态) 不好理解的话,可以这样想:以1为起点开始扩展距离后,选取队列中距离最小的那个,假设为 i 点,由于边权非负,那么能保证此时到 i 点的距离是全局最小的(即不会再被更新到了),就能把i点确定下来,去扩展其他点 再说的抽象点: + spfa 是在图上乱搞,多次迭代出结果 + dij 是在有单调性的图上,利用单调性确定一个特殊的序列,按照这个序列进行扩展能保证正确性 个人理解哈,不对请指出
by KKKZOZ @ 2023-05-05 11:41:15


可以用
by Austra @ 2023-08-24 16:23:43


| 下一页