【学海拾遗】不等式组求解——图论的巧妙使用

279 阅读2分钟

Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情

二话不多说,引入一道题目: 给出一组包含 m 个不等式,有 n 个未知数的形如:

xc1xc1y1xc2xc2y2...xcmxcmymx_{c_1}-x_{c_{1}^{'}}\le y_1\\ x_{c_2}-x_{c_{2}^{'}}\le y_2\\ ...\\ x_{c_m}-x_{c_{m}^{'}}\le y_m\\

的不等式组,求任意一组满足这个不等式组的解。

如上述类型让你求不等式的解的算法题,统称为差分约束系统。下面我们来讨论这种题的解法。

图论?

学过图论的都知道,图有一个很重要的性质:

固定一个结点 i, 设 dist[j] 为图中结点 i 到结点 j 的最短路径。 那么当 j 与 k 之间有一条有向边,边权为 w 时,有以下性质:

dist[j]+wdist[k]dist[k]dist[j]wdist[j]+w\ge dist[k]\\ 即 dist[k]-dist[j]\le w

看看看看,是不是一个不等式??

再进一步,如果图中所有的邻接结点的关系都这样表示,是不是也构成了一个不等式组??

不得不说,图论真是美妙啊。

不等式组,这么一个感觉与图论毫不相干的问题,居然还真能用图论解决...

差分约束系统与图的转化

考虑如何把上面的不等式组就可以转换成一个图模型。

显然我们可以顺藤摸瓜的这样想:把 c1,c1,...,cm,cmc_1,c_{1}^{'},...,c_m,c_{m}^{'} 当作图的结点,对应的 xx 当作最短距离(即 dist[ci]dist[c_i] )。

那么,当有 xcixciyix_{c_i}-x_{c_{i}^{'}}\le y_i 不等式时,我们就可以从 cic_{i}^{'}cic_i 连一条边权为 yiy_i 的边。

这时,当我们求出来图的最短路径时,所有的 distdist 就都满足上面的不等式了。

但是,如何找出发节点?

如果我们随便找一个结点作为起点进行最短路,那么有可能达不到一些节点,本来有解的不等式被我们得出无解的结论。

通用方法就是:设置一个公共的超级结点,它以边权为0连向每一个边,从这个点作为起点进行最短路。

这样会不会破坏不等式的结构?答案是否定的。因为我们只是多加了一些约束条件,原来的图结构没有被我们破坏,的出来的答案自然也满足原来的不等式组。

总结

  • 对于求一组不等式组的问题,统称为差分约束系统。
  • 这类问题的通用解法:
    • 对于每个不等式,我们按照上面的方式在图中加入相应的点和边。
    • 最后求最短路,这时就使得dist满足所有不等式了。
    • 如果找不到一个保证能到达所有点的起点,那就设置一个超级源点。