差分约束
差分约束:解决满足条件的不等式
为了保证图连通,引入附加点vs,使图中每个点vi到vs都可达,设弧<vs, vi>的权w(vs, vi)=0.
对于每个差分约束xj-xi<=bk,则弧<vj, vi>权值为bk;
初始化dis[vs]=0, dis[vi]=INF;
然后求以vs为源点的最短路径。由于存在负权值,因此可以用Spfa算法求
spfa算法:
1.将源点加入队列, dis[s]=0, 其他点为无穷大
2.将队头取出标记为front,遍历与他相邻的点x;
3.如果dis[x]>dis[front]+edge[x].value即源点到x的距离大于源点到front的距离+front到x点的距离,更新dis[x].
并且如果x不在队列中将它入队.重复步骤2
4.如果某一点出队的次数大于n-1,证明存在负环,无法计算单源最短路