差分约束系统

先来看一道例题

现有未知数 a1,a2,,an ,有若干个形如 aiajk 的不等式构成的不等式组,求解这个不等式组的一组解。

一眼看下去,好像很难入手。

我们先把不等式整理一下:

aiajk=aiaj+k

等一下,是不是有点熟悉?

对于一个图的最短路,我们设 disi 表示源点到 i 的最短路,那么如果j>i,那么满足: disidisj+Wi,j

等等,你发现了什么?

没错,对于这个不等式组,我们可以像图的最短路问题一样连边( aiajk j i 连一条边权为k的单向边),然后设一个源点s连向 a1,a2,,an ,做一次最短路得出的{ disi }即为一组可行解。

像这样,由 n 个变量,有若干个形如aiajk约束的系统,就叫差分约束系统,像我们这样把它构成的图就叫做差分约束图

再来看一组例题:

设有n个盒子标号为1…n,每个盒子最多放1个球。其中有若干个 [ai,bi,ci] 表示 ai ~ bi 最多可放 ci 个球,求这n个盒子最多可放多少个球。

这就是典型的求解有若干个形如 aiajk 条件约束的差分约束系统。

我们设 Si 表示 1 ~i放n个球,那么我们有:

0SbiSai1ci

0SiSi11

按照上述方法连边,做一次最短路,所得的 disn 就是答案(可以证明一下为什么)。

至此我们大概了解了差分约束系统及其应用,这里还有一道例题:DY引擎

posted @ 2016-06-20 20:10  sadstone  阅读(57)  评论(0编辑  收藏  举报