差分约束<基础题练习><我是图论渣TAT>

今天有位神犇问我差分约束那道题怎么做QAQ
然而我这么弱怎么可能会那道题QAQ
所以先来介绍下什么是差分约束:


最短路:
dis[v] <= dis[x] + w(x,v);
那么我们考虑:
如果有一些约束,形如:
ba<=k1
cb<=k2
ca<=k3
求c - a的最大值.
那么怎么做呢?
考虑max{c - a}肯定恰好等于某一个约束。
证明:
若有m个约束,其中最大解maxn<所有等式。
那么必然存在更大的解使得其解更优。
上面的都是我在胡言乱语
我们的max{c - a}肯定等于最小的那个约束没错吧。
如果我们考虑把上面的a,b,c分别建立点的话。
我们对a - > b连边,长度为 k1 。这样 disbdisa<=k1
然后我们对其它点都进行连边,最后连成这个样子。
这里写图片描述
例子引自void - man的博客
那么我们求max{c - a},也就是转化成了求a到c的最短路长度。
这样的话问题就解决了。


于是我打开了百度百科:
其实百度百科的例题还不错:
有n个盒子,每个盒子最多放一个球,现在m个区间[ ai,bi ]只能放 ci 个球,求最多在这n个盒子里面放几个球。
对其求前缀和,则有:

SiSi1<=1

SbiSai<=ci

这样我们对 S0...Sn 分别建出点来,跑一下SPFA,然后就能解决辣。
另外,建议一开始跑SPFA的时候增加附加源点,不然很容易挂。


以后应该去练习这些题了QAQ
感觉图论一点都不会……
其实fsf说得好像很有道理……
就是我根本不会图论数学和字符串。
QAQ

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值