总的开说差分约束问题就是给出一系列不等式然后求问某一式子的最大值或者最小值。
差分约束问题详解:
比如有这样一组不等式:
X1 - X2 <= 0
X1 - X5 <= -1
X2 - X5 <= 1
X3 - X1 <= 5 不等式组(1)
X4 - X1 <= 4
X4 - X3 <= -1
X5 - X3 <= -3
X5 - X4 <= -3
全都是两个未知数的差小于等于某个常数(大于等于也可以,因为左右乘以-1就可以化成小于等于)。这样的不等式组就称作差分约束系统。
这个不等式组要么无解,要么就有无数组解。因为如果有一组解{X1, X2, ..., Xn}的话,那么对于任何一个常数k,{X1 + k, X2 + k, ..., Xn + k}肯定也是一组解,因为任何两个数同时加一个数之后,它们的差是不变的,那么这个差分约束系统中的所有不等式都不会被破坏。
差分约束系统的解法利用到了单源最短路径问题中的三角形不等式。即对于任何一条边u -> v,都有:
d(v) <= d(u) + w(u, v) 
其中d(u)和d(v)是从源点分别到点u和点v的最短路径的权值,w(u, v)是边u -> v的权值。
显然以上不等式就是d(v) - d(u) <= w(u, v)。这个形式正好和差分约束系统中的不等式形式相同。于是我们就可以把一个差分约束系统转化成一张图,每个未知数Xi对应图中的一个顶点Vi,把所有不等式都化成图中的一条边。对于不等式Xi - Xj <= c,把它化成三角形不等式:Xi <= Xj + c,就可以化成边Vj -> Vi,权值为c。
<??http://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+1Nq9qMGizby1xMqxuvLTprjD0+vEv7Hquq/K/bXEt/u6xc/gzayjrLy0xL+x6rqvyv3Oqj49LLK7tcjKvbXEt/u6xdKy06a4w7Hkzqo+PSzU2bj5vt2yu7XIyr29qMGizbyjuzxicj4KPC9wPgo8cD7P4Le0o6zI57n7ysc8PaOssru1yMq90rLTprjDyKuyv7Hkzqo8PaOs1Nm9qMGizbyjuzxicj4KPC9wPgo8cD6jqNK71sLQ1KOpt/u6xcrHPj278tXfPD2jrLKit8c8us0+PC9wPgo8cD48YnI+CjwvcD4KPHA+yc/OxL7NvbLBy8jnus64+b7dsru1yMq9vajBos28o6zExLW9tde6zc7KzOK1xLK7tcjKvbXE1+608yYjMjA1NDA7u/LV39fu0KEmIzIwNTQwO9PQyrLDtLnYwarE2KO/PC9wPgo8cD7I58zixL/SqsfzZCh2KSAtIGQodSm1xNfu0KEmIzIwNTQwO6Osv8nS1Nequ7uzyWQodikgLSBkKHUpID49TSy2+Lj5vt3Jz87EtcPWqk3OqnUtPna1xMioJiMyMDU0MDuhozwvcD4KPHA+0qrP68nPyr3X07PJwaKjrNTy06bT0G1pbihkKHYpIC0gZCh1KSk+PW1heChNKaOsvLTXqrPJwcvH83UtPnbX7rOktcTCt762vLTKvdfTtcTX7tChJiMyMDU0MDs8L3A+CjxwPs/gzayjrMjnufvH82QodikgLSBkKHUptcTX7rTzJiMyMDU0MDujrNXi06a4w8fzdS0+drXE1+7QocK3vrY8L3A+CjxwPrbU09qy7rfWsru1yMq9o6xhIC0gYiA8PSBjIKOsx/O1xMrH1+62zMK3o6y1w7W9tcTKx9futPMmIzIwNTQwO6O7PC9wPgo8cD621NPasu631rK7tcjKvSBhIC0gYiA+PSBjCiCjrMfztcTKx9fus6TCt6OstcO1vbXEysfX7tChJiMyMDU0MDuhozwvcD4KPHA+PHU+PGJyPgo8L3U+PC9wPgo8cD48dT652NPasrmyu7K5s+TUtLXjo7o8L3U+PC9wPgo8cD48dT61sWQodikgus1kKHUptrzS0dTazbzW0LTm1NqjrNTysrvQ6NKqsrmz5NS0teOhozwvdT48L3A+CjxwPjx1PrWxzbzDu9PQxL+x6tS0teO1xMqxuvK78tXf0OjSqsGsvdPV+7j2zby1xMqxuvKjrNTy0OjSqrK5s+TUtLXjoaOyorK5s+S52M+1oaM8L3U+PC9wPgo8cD48YnI+CjwvcD4KPHA+yOe5+8281tC05tTauLrIqCYjMjA1NDA7u9jCt6Os1PLH87P2wLS1xNfutszCt762w7vT0NLi0uWho9Kyvs3Kx8u1sru1yMq9zt694qGjy/nS1NKqtNPKx7fx09C4usioJiMyMDU0MDu72MK3vfi2+MXQts/T0M7eveKhozwvcD4KPHA+PGJyPgo8L3A+CjxwPnpvasfz1+7QoSYjMjA1NDA7o7qjqLLut9ayu7XIyr1hLWI+PWOjrMfz1+6zpMK3o6y1w7W91+7QoSYjMjA1NDA7o6k8L3A+CjxwPjwvcD4KPHByZSBjbGFzcz0="brush:java;">#include