网络流-高效劝退

购买志愿者

不妨考虑总共有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段子区间最大为多少
###网络流加些限制
######奇丑无比

不用搜了,题面全是我编的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值