浅谈差分约束问题
时间:2022-05-07
本文章向大家介绍浅谈差分约束问题,主要内容包括差分约束、思路、总结、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。
差分约束
差分约束是解决这样一类问题
给出n个形如x[j]-x[i]<=k的式子,求x[n]-x[1]的最大/最小值
思路
其实这个问题是挺套路的
我们把给出的式子变一下
x[j]-x[i]<=k
x[j]<=x[i]+k
我们不难联想到图论中最短路的性质
假设d[x]表示1到x的最短路
那么对于任意一条边(u,v)
有d[v]<=d[u]+k(k表示边权)
可能有些抽象,举个例子
经过计算不难得到三个不等式
1.(3) x3 - x0 <= 8
2.(2) + (5) x3 - x0 <= 9
3.(1) + (4) + (5) x3 - x0 <= 7
这样的话,我们在满足条件的情况下x[3]-x[0]最大为7
我们按上面的方法建出图
不难发现图中的最短路就是我们想要的答案!
难道这是巧合么?
肯定不是。仔细观察不难发现,我们连边的过程其实就是在转换不等式,求最短路其实就是求最小的限制条件。这样求出来的最短路即为满足条件的最大值
总结
这玩意儿其实挺套路的
如果你找出了题目中的限制条件,直接建图就好
最大值—>把所有式子整理为x[j]-x[i]<=k,从i向j连一条边权为k的边,跑最短
路
最小值—>把所有式子整理为x[j]-x[i]>=k,从i向j连一条边权为k的边,跑最长
路
在求解的时,因为经常要判断负环,所以选用SPFA算法
当一个点的入队次数超过n时必定出现负环
- OData – the best way to REST–实例讲解ASP.NET WebAPI OData (V4) Service & Client
- Java实现的手工做乘法方法,给出二个字符串数字,返回相乘结果
- No.012 Integer to Roman
- 黑帽SEO剖析之手法篇
- IOS学习1——IOS应用程序的生命周期及基本架构
- 浅议“全局变量”、“多线程”和“编译器陷阱”
- Java实现的图片合并方法,支持水平和垂直合并
- OC学习15——文件I/O体系
- 用惯了ORM,居然不会写分页SQL了
- OC学习14——谓词
- 如何在32位系统中使用ROP+Return-to-dl来绕过ASLR+DEP
- 如何使用Twitter构建C;C服务器
- 【Python语言】Scikit-learn 快速入门
- 抽象SQL查询:SQL-MAP技术的使用
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Android安装应用 INSTALL_FAILED_DEXOPT 问题及解决办法
- php简单检测404页面的方法示例
- thinkPHP3.2使用RBAC实现权限管理的实现
- Flutter以两种方式实现App主题切换的代码
- PHP中非常有用却鲜有人知的函数集锦
- PHP针对redis常用操作实例详解
- thinkPHP5使用Rabc实现权限管理
- PHP实现cookie跨域session共享的方法分析
- VS Code开发React-Native及Flutter 开启无线局域网安卓真机调试问题
- Laravel5.4简单实现app接口Api Token认证方法
- PHP生成zip压缩包的常用方法示例
- Android Studio用genymotion运行后小图标无法显示问题
- PHP7数组的底层实现示例
- 浅析Flutter AbsorbPointer 与 IgnorePointer的区别
- php用wangeditor3实现图片上传功能