
上下界网络流
Deep_Kevin
这个作者很懒,什么都没留下…
展开
-
Chips Challenge,UVA1104,amazing的建图+有源汇上下界最小费用最大流
正题 真是非常的amazing啊! 先说说正确做法. 由于要满足A/B的限制,考虑暴力枚举每一行每一列最多选多少个,根据这个求出当前全局最多选多少个,如果满足条件,那么更新答案. 对于行列建立二分图,源向行点连边,容量为该行的可放置部件(包括已选)的位置个数,列点向汇连边容量为该列的可放置部件(包括已选)的位置个数.枚举行列最大值t,从行点到该行对应的列点连一条容量为t的边,这条边流了多少,说明行和列各选了多少. 对于一个可放置点(x,y...原创 2020-09-18 10:20:07 · 206 阅读 · 0 评论 -
矩阵,洛谷P4194,二分+有源汇上下界可行流
正题 首先答案是有二分性的,所以我们先二分这个max. 那么我们就知道b的每行每列的取值范围了,建个二分图,左边是b的行,右边是b的列,中间的边是个完全图,上下界是[l,r],源汇到二分图的两边连行列的取值范围,然后就是一个有源汇上下界网络流的板子. #include<bits/stdc++.h> using namespace std; const int N=410; struct edge{ int y,nex,c; }s[N*N]; int first...原创 2020-09-18 09:49:49 · 193 阅读 · 0 评论 -
Captain America,CF704D,有源汇上下界最小流
正题 首先我们假设全部选权值较小的颜色,将行列离散化,转化为二分图,对于一行或一列的限制来说,更改颜色数量的区间是一个范围,以此作为上下界与源汇连边,中间存在点(i,j)那么就从i向j连边,容量为1,最后看看可行的最小流是多少,就知道至少要改多少个成权值较大的颜色,才能满足方案. 输出方案我们就把中间边的编号记下来,看看有没有流量即可,有流量说明改了. 当前弧优化漏打一个&,T了半小时. #include<bits/stdc++.h> usi...原创 2020-09-18 09:48:53 · 144 阅读 · 0 评论 -
80人环游世界,洛谷P4553,有源汇上下界最小费用可行流
正题 对于每一个城市拆成入点和出点,连边就可以了用一条下界上界都为v的边来限制一个城市的经过次数,然后源点也多拆一个点出来限制只能有m个人,最后求可行流就可以(反正是最小费用,可行流和最大流没区别. 但是博主并不知道有源汇上下界最小费用最小流怎么求,倒着跑最长路?只增广权为0的路径? #include<bits/stdc++.h> using namespace std; const int N=210; struct edge{ int y,nex,f,c;...原创 2020-09-17 22:00:01 · 201 阅读 · 0 评论 -
Shoot the Bullet|东方文花帖,洛谷 P5192,有源汇上下界最大流
正题 板子 有源汇上下界最大流可以通过跑完有源汇上下界可行流后,跑一遍从源到汇的最大流求解. 有源汇上下界可行流可以通过加一条从汇到源的无穷容量边,转化成无源汇上下界可行流来求解. 无源汇上下界可行流可以通过强行先假设下界已经流满,建立超级源汇,若一个点入度>出度,那么就从超级源向该店连一条容量为入度-出度的边,若一个点出度>入度,那么就从该点向超级汇连一条容量为出度-入度的边,判断是否有满足S割集只有超级源来求解. 注意最后...原创 2020-09-17 12:00:39 · 198 阅读 · 0 评论 -
[NOI2015]小园丁与老司机,洛谷P2304,恶心的建图+有源汇上下界最小流
正题 这题建图太恶心了,思路十分的简单,看到相同的显然可以把分层图建出来,一个流量代表一辆压路车,对于必须要走过的边就设下限流量为1,然后跑有源汇的上下界最小流就可以,但是怎么将那些边建出来呢? 每一层考虑dp,看看同层转移到这个点的答案,如果转移点在左边,那么它可以先走到最左边,然后再走到这个点,所以对于左边的任何转移点,转移的时候加上的都是左边的点数,对于右边的转移点同理. 把同层可能的转移点用vector存起来,把原来转移到该点值的下层转移点用vector存起...原创 2020-09-17 11:52:07 · 207 阅读 · 0 评论