购买志愿者
不妨考虑总共有inf个市民可以成为志愿者。
s向第一天连inf边表示有inf个市民可以成为偶像志愿者
然后考虑一个睡觉序列,表示每天最多在睡觉的有多少人
(相当于强制把不少于当天需要的人喊起来干活)
↓
inf inf-第一天所需 inf-第二天所需
——第一天——————第二天————————第三天
↓我是边我是边我是边我是边我是边我是边我是边↑
→→→→→→→→→→→→→→→→→→→→→→
容量为当天的人,费用为每个人的费用的边(相当于可以把这些人喊起来干活)
并且这样肯定能保证满流
这样就保证了每天都有不少于当天所需的人被从床上拽起来干活,并且是费用最少状态。
代码:
略。
吃饭,睡觉与葛优摊
你有N天的生命,每天可以吃饭、睡觉、葛优摊,第i天吃饭收益为ai,睡觉吃饭收益为bi,每L天至少有a天吃饭,b天睡觉。求最大收益。
首先可以转化为每天都睡觉(b>0)时,l天至少有a天吃饭,至多l-b天吃饭。
还是考虑一个爬起来序列。
首先连续l天至多吃l-b的饭相当于每天吃的饭需要l天消化,任何时候肚子里至多l-b天的饭。
s向第一天连流量为l-b的边,每一天向后第L天连流量为1的边表示这一天吃饭,每一天向后一天连流量a的边,跑小费流。
这样考虑一每一天,这一天里肚子最多l-b的流量,亦即这前l天至多有l-b天吃了饭,同时不吃饭序列上有l-a-b的流量,因此相当于不在肚子里的饭至多有l-a-b,故而装在肚子里的饭不少于l-b.跑费用流即可。
这种“睡觉序列上有多少天被强制拽起来吃饭”和“每l天至多有a天吃饭”转化为“每天肚子里最多装多少饭”的转化方法是在是妙啊!
那是王修修!
n*m网格图,每次可以选择一个连续黑色区间染白,消耗1的生命,求你最多剩下多少生命。
首先这题是坑考虑把区间当点的人的,考虑任何一个点都要染白,要么横着被染白要么竖着,任意两个竖着相邻的点都竖着被染白可以省下1的生命,最大流
互怼♂
n*m网格,每个格子内有一些插头,旋转格子使得没有插头对着空气
首先染色,所有黑色当做出点,白色当成入点,然后把每个点拆成四个点分别表示指向四个方向,由源点流入这个点有几个插头的流量(对2个插头的情况保证是连续的)。
#拔草
###n*m网格图,对于一个格子进行一次对这个格子的权值减半的操作有一个花费,要求某些相邻格子之和大于某数或小于某数
###%%%zsy:对于每个点,它最多被拆成log个权值,我们就把它拆成log个点,这log点向一个点连边保证只被选一次,符合条件的点互相连边,黑白染色后小费最大流.
#####费用可以再次拆点连费用边或在点点之间边上放边权,还可以通过在一个点的不同分身点上连边实现优化常数
哈哈哈哈哈yjq的队友把这题黑白染色写错了哈哈哈哈哈
#贪吃蛇
###n*m个节点,有些格子有障碍,用一些回路精确覆盖每个节点,让拐点最多,输出最多拐点数
#####(亦即弯♂的点最多)
黑白染色后考虑匹配横竖匹配插头,同向匹配费用为1,异向匹配费用为0,每个点的插头被用两次
#跑马的yjq你威武雄壮
###n*m棋盘,q匹马,q个偏好位置,每个位置上都要有一匹马,求最少移动次数。(任何时候两匹马同时到同一个位置都会导致yjq被摔下来,祂就会批判你一番)
###暴力匹配就好了,重合可以忽略不计(类似于反向边的思想,当马要重合的时候让yjq跳到原来那个位置的马上先把那匹马骑过去在骑原来的马)
正解:高斯消元搞矩阵行列式
#数据结构与网络流的辩证关系
###长度为n序列,m次讯问在
(
l
,
r
)
(l,r)
(l,r)中k选k段子区间最大为多少
###网络流加些限制
######奇丑无比
不用搜了,题面全是我编的