差分约束<基础题练习><我是图论渣TAT>
2016-05-29 23:17
190 查看
今天有位神犇问我差分约束那道题怎么做QAQ
然而我这么弱怎么可能会那道题QAQ
所以先来介绍下什么是差分约束:
最短路:
dis[v] <= dis[x] + w(x,v);
那么我们考虑:
如果有一些约束,形如:
b−a<=k1
c−b<=k2
c−a<=k3
求c - a的最大值.
那么怎么做呢?
考虑max{c - a}肯定恰好等于某一个约束。
证明:
若有m个约束,其中最大解maxn<所有等式。
那么必然存在更大的解使得其解更优。
上面的都是我在胡言乱语
我们的max{c - a}肯定等于最小的那个约束没错吧。
如果我们考虑把上面的a,b,c分别建立点的话。
我们对a - > b连边,长度为k1。这样disb−disa<=k1
然后我们对其它点都进行连边,最后连成这个样子。
例子引自void - man的博客
那么我们求max{c - a},也就是转化成了求a到c的最短路长度。
这样的话问题就解决了。
于是我打开了百度百科:
其实百度百科的例题还不错:
有n个盒子,每个盒子最多放一个球,现在m个区间[ai,bi]只能放ci个球,求最多在这n个盒子里面放几个球。
对其求前缀和,则有:
Si−Si−1<=1
Sbi−Sai<=ci
这样我们对S0...Sn分别建出点来,跑一下SPFA,然后就能解决辣。
另外,建议一开始跑SPFA的时候增加附加源点,不然很容易挂。
以后应该去练习这些题了QAQ
感觉图论一点都不会……
其实fsf说得好像很有道理……
就是我根本不会图论数学和字符串。
QAQ
然而我这么弱怎么可能会那道题QAQ
所以先来介绍下什么是差分约束:
最短路:
dis[v] <= dis[x] + w(x,v);
那么我们考虑:
如果有一些约束,形如:
b−a<=k1
c−b<=k2
c−a<=k3
求c - a的最大值.
那么怎么做呢?
考虑max{c - a}肯定恰好等于某一个约束。
证明:
若有m个约束,其中最大解maxn<所有等式。
那么必然存在更大的解使得其解更优。
上面的都是我在胡言乱语
我们的max{c - a}肯定等于最小的那个约束没错吧。
如果我们考虑把上面的a,b,c分别建立点的话。
我们对a - > b连边,长度为k1。这样disb−disa<=k1
然后我们对其它点都进行连边,最后连成这个样子。
例子引自void - man的博客
那么我们求max{c - a},也就是转化成了求a到c的最短路长度。
这样的话问题就解决了。
于是我打开了百度百科:
其实百度百科的例题还不错:
有n个盒子,每个盒子最多放一个球,现在m个区间[ai,bi]只能放ci个球,求最多在这n个盒子里面放几个球。
对其求前缀和,则有:
Si−Si−1<=1
Sbi−Sai<=ci
这样我们对S0...Sn分别建出点来,跑一下SPFA,然后就能解决辣。
另外,建议一开始跑SPFA的时候增加附加源点,不然很容易挂。
以后应该去练习这些题了QAQ
感觉图论一点都不会……
其实fsf说得好像很有道理……
就是我根本不会图论数学和字符串。
QAQ
相关文章推荐
- 强悍的 Linux —— 权限管理(组及用户管理)
- XTU 1247 Robb's Problem
- CoordinatorLayout配合AppBarLayout,Toolbar和TabLayout的使用
- Linux驱动之Kobject、Kset (二)uevent mdev ktype type
- 2015-2016-2《Java程序设计》团队博客3
- AppCan_3 传统的流式布局 与 弹性盒子
- absolute与relative
- PHP接口简介及使用
- 专业值得信赖——MSDN
- oracle存储过程游标
- 如何使用Maven scope
- swift闭包简洁到变态
- 俄罗斯方块游戏自动机
- 解决block的retain cycle的警告问题
- Spring管理
- android控件ImageView加载sdcard卡,网络及res中的图片
- Linux下没有 itoa
- mybatis实战教程(mybatis in action),mybatis入门到精通
- 第十三周工作总结
- java自定义异常类型