请问差分约束为什么只能用最长路,而不能用最短路?

P5960 【模板】差分约束

@[C C A](/user/78645) 我这边交只有0分啊
by peterwuyihong @ 2021-07-22 18:30:52


可能是`SPFA`被卡了。。。可以把`queue`换成`stack`试试
by jia_shengyuan @ 2021-07-22 18:45:45


@[C C A](/user/78645) 楼主,不是这道题吧
by 天命之路 @ 2021-07-22 18:50:47


```cpp if (++cnt[u] > 1000) puts("-1"), exit(0); ``` ```cpp if (++cnt[u] > 3500) puts("-1"), exit(0); ``` 卡界卡得不一样,显然一个WA一个AC 如果你用最长路,边权都非负,跑遍dijkstra 稳过 SPFA 可能被卡 换成`stack` 大概率更慢
by 天命之路 @ 2021-07-22 18:53:00


@[天命之路](/user/226435) 边权非负跑最长路不是不能用 dij 吗? 您是不是想说非正啊/yun
by zimujun @ 2021-07-22 19:48:13


哦对,说错了,不能用dij 那个稳过的算法是这样的: 边权都非负的时候,跑最长路 先用tarjan 把环缩掉,可以证明如果有解,环内边权均为0,故这个强连通分量内所有的 $dist$ 值都相同。 然后拓扑排序,在新图上求 $dist$ (令 $dist[0]=0$,其余为 $-inf$ ,常规跑即可)
by 天命之路 @ 2021-07-22 21:36:03


|