差分约束
~无相~
这个作者很懒,什么都没留下…
展开
-
AcWing 393. 雇佣收银员
思路 这题用差分约束加枚举的方式求解,是一个比较有意思的题 这里由于遇到了区间和的差分约束,所以把所有时间往后移动一位,把S[0]空出来,用S[i]表示0~i的时间内有多少人上岗,那么可以得到已下不等式 S[i−1]≤S[i]≤num[i]+S[i−1]S[i-1]≤S[i]≤num[i]+S[i-1]S[i−1]≤S[i]≤num[i]+S[i−1],其中num[i]表示的是在第i小时总共可以上岗的人数 r[i]≤S[i]−S[i−8](8≤i)r[i]≤S[i]-S[i-8](8≤i)r[i]≤S[原创 2020-08-16 19:31:52 · 110 阅读 · 0 评论 -
AcWing 362. 区间
思路 这题用差分约束需要找齐所有的不等式,令S[i]表示0~i之间有几个数字被放入集合里面了 S[i]>=S[i-1] S[i-1]>=S[i]-1,S[i]最多比S[i-1]大1 S[b]-S[a-1]>=c 根据以上不等式建立图 代码1 这里就是最朴素的建图法,最后把N-1这个点作为超级原点来连接每个点 #include <cstdio> #include <cstring> #include <iostream> #include &原创 2020-08-12 12:22:05 · 103 阅读 · 0 评论 -
AcWing 1169. 糖果
思路 根据不同的关系来建立不同的边 1.若X=1,则建立边(u,v,0),表示两者相等. 2.若X=2,则建立边(u,v,1),表示v比u大一. 3.若X=3,则建立边(v,u,0),表示u大于等于v. 4.若X=4,则建立边(v,u,1),表示u比v大一. 5.若X=5,则建立边(u,v,0),表示u小于等于v. 再用一个超级原点,和所有的点连一条从超级原点到所有边的权值为1的边,这样就能保证所有点的值都大于0 然后跑一遍spfa,求出单源最长路即可,这里spfa里要用stack或者手写队列,否则原创 2020-08-11 11:51:11 · 86 阅读 · 0 评论