定义:如果一个系统由n个变量和m个约束条件组成,形成m个形如ai-aj≤k的不等式(i,j∈[1,n],k为常数),则称其为差分约束系统。
我们知道差分约束系统是借助于最短路实现的,那我们在知道了定义之后就来看一下如何将几个不等式放到图上。
假设我们有一个不等式a-b<=c,那我们可以将它变为a<=b+c,所以我们便可以将这个表达式表示为点a向点b连一条权值为c的边,而如果同时有一个不等式a-b>=c,我们便可以将其变为b-a<=c,即b<=a+c,我们便可以由a向b连一条权值为c的边。我们在连好边之后要考虑的便是到底要跑最短路还是最长路。
假设我们要求c-a的最大值,而我们现在有c-a<=k1+k2和c-a<=k3两个式子,那我们知道为了同时满足这两个式子c-a的最小值应该是min{k1+k2,k3}。而如果我们如果要求c-a的最小值且有c-a>=k1+k2和c-a>=k3两个式子,c-a的取值便应该是max{k1+k2,k3},所以我们不难发现求最小值的时候要跑最长路,而求最大值的时候要跑最短路。
在知道以上这些之后做差分约束的题应该就不难了。