差分约束是求解N元一次特殊不等式组的一种方法。
差分约束系统包含N个变量和M个约束条件,每个约束条件都是一个关于两个变量的一次不等式,每个不等式形如X[i]-X[j]<=A[k],其中1<=i,j<=N,1<=k<=M,X[i]、X[j]为变量,A[k]为常数。
引理:若{Xi}为差分约束系统的一组解,Δ为常数,那么{Xi+Δ}也是一组解。
差分约束可以转化为图论中的单源最短路问题求解。差分约束系统中的每个不等式都与最短路中的三角形不等式 dist[v]<=dist[u]+edge(u,v) 形似。
把变量Xi看做有向图中的点i,对不等式X[i]-X[j]<=A[k]从j向i连一条有向边,边权为A[k]。建立一个源点,向每个点连一条有向边,边权为0。从源点出发求单源最短路,X[i]=dist[i]就是一组可行解。有负环说明无解。
若对X[i]有范围限制,可用X[i]与源点之间的约束表示。
不等式>=号时用最长路解决,此时有正环说明无解。
P3275 [SCOI2011]糖果
这是一道非常好的题目,题目的五个约束条件首先都是十分常见的差分约束条件,但是仔细考虑,这个会出现环的情况,所以我们在建图后要进行一次tarjan缩点,然后再建新图,在新图上进行topo序,然后得到最小的和