spfa差分约束为何0分?(有2~3关注)

P5960 【模板】差分约束

@[codingxile](/user/377794) 要建超级源点
by liangbowen @ 2022-07-31 10:27:29


首先负权边也是要建的,把 ```cpp if(w>=0) { add(v,u,w); } ``` 直接改成 `add(v, u, w)`
by liangbowen @ 2022-07-31 10:28:43


楼上正解
by Orange_qwq @ 2022-07-31 10:29:59


`cout<<dis[i]<<'1';` 这输出是啥,还要建超级源点,图不保证联通
by naroanah @ 2022-07-31 10:30:15


@[codingxile](/user/377794) 多弄一个节点 $0$,然后由节点 $0$ 向节点 $1, 2, \ldots , n$ 各连一条长度为 $0$ 的边。SPFA 时直接把节点 $0$ 丢进队列即可,即以 $0$ 作为起点。
by huangkx @ 2022-07-31 10:31:08


其次,这样建完后,图可能不连通。为了使得图连通,我们假设超级源点是 $0$(本来是不存在的QwQ),建边: ```cpp for (int i = 1; i <= n; i++) add(0, i, 0); ``` 边权是 $0$,简单说就是:边是空气。 然后把存边的 `e` 数组开大一点
by liangbowen @ 2022-07-31 10:31:46


@[liangbowen](/user/367488) 所以我得建负权边和超级源点吧
by Level_1024 @ 2022-07-31 10:34:15


@[codingxile](/user/377794) 我就是这个意思呀,肯定得建 您代码就没有建
by liangbowen @ 2022-07-31 10:35:27


@[liangbowen](/user/367488) 哦,好的,thx![](//图.tk/gh!25)
by Level_1024 @ 2022-07-31 10:36:06


还有 `add(u,v,w);` 完全不需要 建议再学学差分约束,看第一篇题解 您显然没有理解三角不等式的转化,只用 `add(v, u, w)` 就够了。 --- 最短路三角不等式:$dis_u + w_{u \to v} \ge dis_v$。 约束条件中,$x_{a}-x_{b} \leq w$ 可以转化为 $x_{b} + w \ge x_{a}$ 这两者看起来一模一样,于是类似地,只需连接 $b_i \to a_i$,长度为 $w_i$。 --- 题解比我现在讲得好多了 QwQ
by liangbowen @ 2022-07-31 10:39:40


| 下一页