经典问题,做了一部分
太水的就不记录了
最大流是对于一种完整的匹配的处理,一条路一个贡献。要求匹配尽可能多。
费用流是对于一个路径的最值的处理,每条边自己的费用。再匹配最多前提下,匹配的费用达到最值。
难点就是对于条件状态的设计
1.
考虑每天一定有ri条脏毛巾,所以脏毛巾和干净毛巾分开处理。
2.
怎样规定一定选择了长度为最长的s的?
起始点一定f[i]=1,终止点一定f[i]=s!
然后拆点覆盖
可以选择多次就1,n的容量是inf
3.
看似是环,由于知道一定经过1,n,所以就是1到n的两条不相交的路径了
但是经过的点是哪些不知道还要最大化。但是知道两条路的起点终点。
所以直接最大费用最大流了。
(星际竞速那个题,不知道起点终点,但是知道所有的点都经过一遍,所以可以S到出点到T,入点到出点)
找方案,dfs两遍,对边打标记
由于(1,n)的边可以走两次,所以加入两次(1,n)的边。
4.
和平常思路不太一样的建模
发现最小割办不了不能同时相交k个的限制,
然后考虑费用流处理最优化问题
但是k个相交怎么办?
最大流来限制!利用分流和汇流
离散化,S-1(k,0); i-i+1(k,0) ; 2n-T(k,0),代表同时最多可以重k次
区间:L-R(1,len),流量为1的道理是,限制同一时间已经占用了一个坑位,之后只能少选择一个
汇流的时候,也满足一个区间结束了,一个坑位空出了。
最大费用最大流即可。
(原来的费用流中最大流都是为了把要求选择的都选上,但是这里恰好是利用,"最大是这么多"的限制!)
投影,二维变成一维,但是(l,l)的点不能体现选择一次,拆点,注意是开区间。是否包含处理好即可。