差分约束
引入
对于一个序列{x1,x2,x3,⋯,xn}{x1,x2,x3,⋯,xn},我们得知关于它的一系列不等式,形如x1−x2≤kix1−x2≤ki,然后我们可以求出一些东西,例子如下:
xn−x0xn−x0的最大最小值。
一个合法的xx序列。
等等等
对于上述问题,我们有什么好的解决方法呢?
我们可以观察学过的一个算法,最短路算法中的松弛操作:
(其实应该是<,为了方便理解加了等号。)
将其变形可以得到:
dis[u]−dis[v]≤−w(u,v)dis[u]−dis[v]≤−w(u,v)
这时我们可以将dis[a]dis[a]看作xaxa,−w(a,b)−w(a,b)看作xa−xb≤kixa−xb≤ki中的kiki,那么这个是不是正好照应了我们的不等式关系?
那么我们可以将其转换为一条有边权的有向边,然后通过SPFA(因为大多数有负权)跑最短路或者最长路就可得到答案。
314

被折叠的 条评论
为什么被折叠?



