谈谈自己对差分约束的理解

首先差分约束有两个应用 就是求最大值 求最小值
求最大值的时候 就是求最短路
那么就要约束的是每个点的最大值
所以建图要往 <= 这个方向建
比如f1 <= f2 + k, f2 <= f3 + k;
所以最大值应该是 f3 + k + k + f3 + k + f3;
所以 只要建立 add(f2,f3,k) f2 比 f3 大k
所以维护的时候就是 dist[f2] = min(dist[f2]),dist[f3] + k);因为 f2要满足 f2 <= f3 + k;
反之求最小值的时候 那么就是求最长路;
反向约束每个点的最大值
f1>= f2 + k f2 >= f3 + k
所以最小值就是 f3 + 2 * k + f3 + k + f3;
所以要建立 add(f2,f1,k) f1最小要等于f2 + k
所以维护的是 dist[f1] = max(dist[f1],dist[f2] + k) 因为f1 要满足 >= f2 + k;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值