差分约束

前置知识:判负环

带负权的有向图判负环,记

cnt[u]= s -> u 最短路包含的边数

当 cnt[u]>=N 时路径中出现重复节点,有负环。这样做比判 进队次数>=N 要快点,但复杂度仍然是O(spfa) = O(nm)。
【P3385 【模板】负环】
题目
题解

【AcWing 361. 观光奶牛】

01分数规划的模板题
题目链接
题解

差分约束系统

在这里插入图片描述
在这里插入图片描述

差分约束系统 是一种特殊的 n 元一次不等式组,它包含 n 个变量 x[1…n] 以及 m 个约束条件,每个约束条件是由 两个 其中的变量做差构成的,形如

x[i] - x[j] <= w
其中 w 是常数(正负都可)

我们要解决的问题是:求一组解 x[1…n],使得所有的约束条件得到满足,否则判断出无解。
差分约束系统中的每个约束条件都可以变形成:

x[i] <= x[j] + w

这与单源最短路中的 三角形不等式 (d[v] <= d[u] + w, u->v)非常相似。因此,我们可以把每个变量看做图中的一个结点,对于每个约束条件 ,从结点 j 向结点 i 连一条长度为 w 的有向边。所有连通块跑最短路,若图中存在负环(SPFA,O(nm)),则给定的差分约束系统无解,否则,{d[i]}为该差分约束系统的一组解(非唯一)。
在这里插入图片描述
【P5960 【模板】差分约束算法】
【P1993 小K的农场】
差分约束的题目有两种类型,最大化或者最小化某两个变量的距离d[N] - d[1]
(有额外的限定条件)
1.最大化d[N]-d[1],正常连边:

对于约束条件 x[i]-x[j]<=w,连 j->i 边权=w的边,代表 d[i]不能超过d[j]+w,相当于规定上界

从d[1]=0跑最短路,若有负环则无解,否则答案 = d[N]。注意这里求最短路,求出的却是最大的d[N]。因为约束条件实际上限定了每个变量的 上界,最短路求出的是 最小的上界 ,实际上是d[N]的最大值。

2.最小化d[N]-d[1],反向连边:

对于约束条件 x[i]-x[j]<=w,转化为x[j]>=x[i]-w;类比单源最长路径中的三角不等式 (d[v]>=d[u]+w, u->v),连 i->j 边权=-w的边,代表d[j]不能小于d[i]+w

从d[1]=0跑最长路,若有正环则无解,否则答案 = d[N]。注意这里求最长路,求出的却是最小的d[N]。因为约束条件实际上限定了每个变量的 下界,最长路求出的是 最大的下界 ,实际上是d[N]的最小值。
最长路求法:
通过spfa求出来,只需要改下松弛的方向即可,即if(d[v] < d[u] + dist(u,v)) d[v] = d[u] + dist(u,v)。
当然我们可以把图中所有的边权取负,求取最短路,两者是等价的。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值