笔记:差分约束

差分约束系统

差分约束系统用于求解 n 元不等式组的解,对于 n 个变量 xn ,能写出形如 axixjc 这样的不等式(左右两边不一定同时存在),就可以使用差分约束求出一组解。

原理

可以发现差分约束的解只有无解和无限解两种情况,对于一组特解 x1,x2xn ,解 x1+d,x2+d,xn+d 也是一组解。

对于不等式 xixjc ,这和最短路的三角不等式 dvdu+w 相似,我们可以连接有向边 (j,i,c)

差分约束系统建立在一个确定的变量基础上,即,我们需要建立超级源点(通常设为 x0),对每个点连边。我们建立不等式 xix00,即有向边 (0,i,0)

对于图上从 0u 的一条路径,将路径上的边权全部相加,可以得到 xux0w,得到 xuw+x0 ,我们将 x0 设为 0,能求得 xu 满足这一条不等式链的最大取值,对于所有从 0u 的路径,其最短路即为 xu 的全局最大值。

当然,设置不同的 x0 ,可以得到不同的 xi 的偏移,当 x0=0 时,能得到 xi 不大于 0 的一组解。

上述求解的是最大值,一些题目要求解最小值,需要考虑不等式 axixj,和最长路的三角不等式 dvdu+w ,还是连边 (j,i,a) ,只不过这次求解的是最长路。对于超级原点有 xix00,连边 (0,i,0),此时求最长路能得到每个变量的最小值。

更进一步,我们求出的是每个点在满足所有不等式条件后,和 x0 差值的最值,和其他变量均没有关系。因此,所有变量的最值就是全局的最优解。例如求所有变量和的最值,那答案即为所有变量最值的和。

例题

给出 m 个区间 [li,ri],值域在 [1,n] 中,给 [1,n] 选定最少数量的点,使得每个区间内都有至少 ci 个点被选定。

设前缀和为 pi,有不等式 0pipi11pripli1ci ,对于 pipi11,转换后得 pi1pi1,于是连边后求最长路即可。此时超级源点只需要连边 (0,1) 即可,因为整张图都是连通的。

posted @   蒻蒻虫  阅读(6)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
点击右上角即可分享
微信分享提示