网络流
romiqi_new
这个作者很懒,什么都没留下…
展开
-
191101CSP模拟题解
T1:给定n,k,ln,k,ln,k,l,求nnn个数每个取值[0,l][0,l][0,l],其一个子序列和为kkk的方案数,n,k≤20n,k\le 20n,k≤20补集转化,是个背包,然后状压算方案,dp of dpCode:#include<bits/stdc++.h>#define ll long long#define mod 998244353using nam...原创 2019-11-01 17:07:40 · 348 阅读 · 0 评论 -
191003NOI模拟题解
T1:题目大意:给你一张图,每条边有边权,要求保留边权和尽量大的边使得每个点至多有一条出边和至多一条入边,点数200,边数5000解法:显然的二分图最小费用流,可行流即可不需要最大流Code:#include<bits/stdc++.h>#define ll long longusing namespace std;inline int read(){ int res=...原创 2019-10-05 17:05:53 · 328 阅读 · 0 评论 -
[LOJ3097][网络流][分治]SNOI2019:通信
LOJ309760-80pts的建图应该很简单吧,就拆成二分图,然后:sss向xix_ixi,流量1,费用0yiy_iyi向ttt,流量1,费用0sss向yiy_iyi,流量1,费用wwwxix_ixi向yjy_jyj,流量1,费用∣ai−aj∣|a_i-a_j|∣ai−aj∣然后跑mcmfmcmfmcmf这样的边数是n2n^2n2,显然无法接受考虑优化建图,一个x要...原创 2019-09-12 14:03:34 · 214 阅读 · 0 评论 -
[51nod1325][最大权闭合子图]两棵树的问题
51nod1325把每个点向两棵树上的父亲分别连边,则就是最大权闭合子图问题,然后就没了Code:#include<bits/stdc++.h>using namespace std;inline int read(){ int res=0,f=1;char ch=getchar(); while(!isdigit(ch)) {if(ch=='-') f=-f;ch=ge...原创 2019-08-21 17:02:23 · 96 阅读 · 0 评论 -
[LOJ569][网络流][二分图匹配]LibreOJ Round #11:Misaka Network 与测试
LOJ569水题可以发现2单独选是最优的,然后剩下的1和3两两配对是最优的那就是裸的二分图匹配了Code:#include<bits/stdc++.h>#define pb push_backusing namespace std;inline int read(){ int res=0,f=1;char ch=getchar(); while(!isdigit(c...原创 2019-08-15 18:56:03 · 209 阅读 · 0 评论 -
[BZOJ4519][最小割树]CQOI2016:不同的最小割
BZOJ4519同BZOJ2229这题unique就完了Code:#include<bits/stdc++.h>using namespace std;inline int read(){ int res=0,f=1;char ch=getchar(); while(!isdigit(ch)) {if(ch=='-') f=-f;ch=getchar();} whil...原创 2019-08-15 08:30:26 · 113 阅读 · 0 评论 -
[BZOJ2229][最小割树]ZJOI2011:最小割
BZOJ2229最小割树即一棵树,在最小割树上,两点间路径上的最小边即为原图中的最小割构建方法:先任选两个点,然后求出它们之间的最小割,然后在树上这两个点之间连一条边,权值为最小割,然后把这次最小割割开的两个部分分别递归处理对于这道题,要求最小割树上有多少不相同的权值,unique就完了Code:#include<bits/stdc++.h>using namespace ...原创 2019-08-15 08:27:01 · 95 阅读 · 0 评论 -
[BZOJ3140][网络流]HNOI2013:消毒
BZOJ3140二维的情况:把所有x和y转成二分图,跑最大匹配即可推广到三维:因为a∗b∗c≤5000a*b*c\leq5000a∗b∗c≤5000,所以有一维必定小于17,则2172^17217枚举这一维的状态,剩下的二维直接做就好了注意memset会TCode:#include<bits/stdc++.h>using namespace std;inline int ...原创 2019-07-31 20:45:47 · 94 阅读 · 0 评论 -
[BZOJ3144][最小割]HNOI2013:切糕
BZOJ3144要求每个竖着的列选一条边出来,而且选择的权值和最小,那就直接上最小割具体的,我们把每一列的所有边依次连接成为一条s到t的路径,做最小割即可考虑怎么满足d的限制,也就是选了一条边必须选与这列相邻的列的某个连续范围的边那么就从这条边的两个端点分别连对应的可选区间的两端,这样就限制了最小割必须割选定范围内的边,否则就不能割开Code:#include<bits/stdc...原创 2019-08-04 22:45:33 · 98 阅读 · 0 评论 -
[BZOJ3876][网络流]AHOI2014:支线剧情
BZOJ3876每条边下界为1,上界INF,然后就是最小费用最大流模板Code:#include<bits/stdc++.h>using namespace std;inline int read(){ int res=0,f=1;char ch=getchar(); while(!isdigit(ch)) {if(ch=='-') f=-f;ch=getch...原创 2019-07-31 16:08:43 · 82 阅读 · 0 评论 -
[POJ1637][网络流]Sightseeing tour
POJ1637首先我们把无向边随便定向,得出每个点的入度in和出度out在欧拉回路中,每个点的in和out必须相等如果有一个点的∣in−out∣|in-out|∣in−out∣为奇数,那么不可能存在欧拉回路现在问题转化为可以改变无向边的方向,使得每个点的in和out相等,有向边不能改变,不用考虑无向边就直接建成一开始定向的方向,流量为1对于一个点,如果出度大于入度,就从s到它连一条流量...原创 2019-07-31 13:42:22 · 107 阅读 · 0 评论 -
[BZOJ4823][最小割]CQOI2017:老C的方块
BZOJ4823可以看出来是最小割,关键在于怎么建边表示出格子之间的关系观察发现每个这样的格子在如下路径上总会在第二步跨过关键边所以我们可以把格子染色,关键边两边分别染成红色和黄色,然后和红色格子相邻的染成绿色,黄色格子相邻的染成蓝色则如上的路径经过的颜色序列是确定的那么就可以在颜色的分层图上做最大流求出最小割了Code:#include<bits/stdc++.h>...原创 2019-07-31 11:10:25 · 114 阅读 · 0 评论 -
[BZOJ5251][二分图匹配]九省联测:劈配
BZOJ5251原题解二分图匹配,若失败,则继续枚举下一志愿,若成功则这就是第一问答案,这样的话,第ii张图就会是满足前ii个人志愿的剩余图,这在第二问会用到,所以我们要保留下来。然后第二问,同样是对学员一个一个处理,二分他需要前进的名次,然后直接使用原来的剩余图进行加边,我们可以把他前si的志愿全部一起加上(这显然是对的,一起做可以节省大量时间),然后开始增广,同样的,成功说明他可以少前进...原创 2019-02-25 22:12:03 · 167 阅读 · 0 评论 -
[BZOJ5316][计算几何][网络流]JSOI2018:绝地反击
BZOJ5319一个比较好想的暴力:二分答案,然后把每艘飞船的能到达的距离算出,是一个圆,把所有圆和攻击轨道求交,相交这段弧和多边形顶点可以匹配,可以发现一定有个多边形顶点在某个交点处那么就枚举这个顶点,然后(O(n2))(O(n^2))(O(n2))连边,跑dinicdinicdinic是O(ee)O(e\sqrt e)O(ee)总复杂度O(n4logn)O(n^4logn)O(n4l...原创 2019-03-08 15:17:53 · 200 阅读 · 0 评论 -
[luogu2766][网络流24题]最长递增子序列
luogu2766分析:对于这种一个点只能选一次的问题我们拆点然后考虑连边,就是如果dp的时候一个点可以转移到另一个点就可以连边,然后跑个最大流就完了第三问就是把1和n的流量设成infCode:#include<bits/stdc++.h>using namespace std;inline int read(){ int res=0,f=1;char ch=getc...原创 2019-03-20 13:38:51 · 145 阅读 · 0 评论 -
[luogu2774][网络流24题]方格取数
luogu2774这题可以发现我们把格子染色,使得相邻的格子的颜色不同,然后把白色格子和s连一条边,黑色格子和t连一条边,就转化为了最小割问题Code:#include<bits/stdc++.h>using namespace std;inline int read(){ int res=0,f=1;char ch=getchar(); while(!isdigit(c...原创 2019-03-20 18:00:49 · 99 阅读 · 0 评论