随笔分类 -  网络流

摘要:本题是分层图最大流问题,相当于按时间拆点,每个当前点向下一点的下一时间层连点,每一层有n+1个点 #include<bits/stdc++.h> using namespace std; #define lowbit(x) ((x)&(-x)) typedef long long LL; const 阅读全文
posted @ 2020-02-13 21:28 GRedComeT 阅读(148) 评论(0) 推荐(0)
摘要:本题可以把求解的目标转换成从1到N两条不相交的路径,回想上一题,通过拆点来限制一边只能过一次,capacity为1,cost为-1来跑最大费用流,注意1点和N点的capacity要为2,因为需要过2次,答案就是最大费用流-2,本题的收获是输出路径,从每个点的出点出发(虚点)枚举其连接的下一个入点(实 阅读全文
posted @ 2020-02-12 22:15 GRedComeT 阅读(128) 评论(0) 推荐(0)
摘要:三倍经验,三个条件,分别对应了常见的3种模型,第一种是限制每个点只能一次且无交点,我们可以把这个点拆成一个出点一个入点,capacity为1,这样就限制了只选择一次,第二种是可以有交点,但不能有交边,那我们就不需要拆点,限制每条capacity都为1就可以了,第三种直接连,没有限制( #includ 阅读全文
posted @ 2020-02-12 16:47 GRedComeT 阅读(133) 评论(0) 推荐(0)
摘要:本题和方格取数一样,也可以分成黑白点,本题加上特判一个点是否有障碍即可,其余和那题没什么区别,挂一下大佬的证明(二分图最大独立集) #include<bits/stdc++.h> using namespace std; #define lowbit(x) ((x)&(-x)) typedef lo 阅读全文
posted @ 2020-02-12 15:48 GRedComeT 阅读(225) 评论(0) 推荐(0)
摘要:费用流问题,每个样本选一次,就连一条capacity为1,权为给定的值,因为可以重复走,再连capacity为无穷,权为0的边,再一次连接给定的出点和汇点即可 #include<bits/stdc++.h> using namespace std; #define lowbit(x) ((x)&(- 阅读全文
posted @ 2020-02-12 15:04 GRedComeT 阅读(126) 评论(0) 推荐(0)
摘要:有限制的问题,显然考虑全选再根据限制去掉的想法较优,我们发现一个点四周的点受限,其x或者y差一,也就是说奇偶性不同,那我们可以将其分成白点和黑点,就变成了最小割的问题,将每个白点向受限制的黑点连边,capacity为INF,每个黑点向汇点连边,capacity为该点的值,同理,源点向每个白点连边,这 阅读全文
posted @ 2020-02-12 14:01 GRedComeT 阅读(133) 评论(0) 推荐(0)
摘要:简单的费用流问题,每个人对每个任务连边,每个任务对汇点连,源点对每个人连,最大费用取反即可 #include<bits/stdc++.h> using namespace std; #define lowbit(x) ((x)&(-x)) typedef long long LL; const in 阅读全文
posted @ 2020-02-12 12:44 GRedComeT 阅读(139) 评论(0) 推荐(0)
摘要:简单的最大流问题,一样的设源点汇点,每个单位向每个餐桌连capacity为1的边,源点向每个单位连capacity为人数的边,每个餐桌向汇点连capacity为座位数的边,跑最大流,若flow=总人数则有方案,遍历每一个单位流量为1的点即可 #include<bits/stdc++.h> using 阅读全文
posted @ 2020-02-12 12:11 GRedComeT 阅读(107) 评论(0) 推荐(0)
摘要:最小路径覆盖=节点数-最大匹配数,拆成二分图跑dinic/匈牙利即可,注意输出路径的时候判断拆成的入点和出点和另加的反向边 #include<bits/stdc++.h> using namespace std; #define lowbit(x) ((x)&(-x)) typedef long l 阅读全文
posted @ 2020-02-12 11:54 GRedComeT 阅读(143) 评论(0) 推荐(0)
摘要:本题很简单的费用流问题,有石头的点需要限制,那我们就可以拆点,capacity为1就可以限制,然后cost为-1,直接跑板子就可以了,注意输出的时候找残量网络的反向边 阅读全文
posted @ 2020-02-11 22:23 GRedComeT 阅读(101) 评论(0) 推荐(0)
摘要:这题和3358一模一样,建模形式直接不用变,就两点不一样,一是len变化了,加入y后再更新即可,还有就是可能会出现x0=x1的情况,即一条开线段垂直x轴,如果我们依旧按照上一题的建图方法,就会出现负权环,无法跑出答案,我们就可以把一个点拆成入点和出点,这样无论是否是不是垂直都可以一样建,注意开lon 阅读全文
posted @ 2020-02-09 19:31 GRedComeT 阅读(166) 评论(0) 推荐(0)
摘要:网络流建图好难,这题居然是网络流(雾,一般分析来说,有限制的情况最大流情况可以拆点通过capacity来限制,比如只使用一次,把一个点拆成入点出点,capacity为1即可,这题是限制最大k重复,可以联想到最大流问题,设源点汇点,限制的k就是其最大的capacity,其最大流一定<=k,跑出来一定满 阅读全文
posted @ 2020-02-09 14:53 GRedComeT 阅读(146) 评论(0) 推荐(0)
摘要:第一问可以直接DP来做,联想上一题,线性规划都可以化为网络流?我们可以借助第一问的DP数组,来建立第二问第三问的网络流图,考虑每一种可能,都是dp数组中满足num[i]>=num[j]&&dp[i]=dp[j]+1(i>j),每一种可能都是从dp为1的点递增到dp为第一问的值的点,那么我们就设一个源 阅读全文
posted @ 2020-02-08 22:55 GRedComeT 阅读(145) 评论(0) 推荐(0)
摘要:本题是最小费用流问题,据说所有的线性规划问题都能变成网络流,部分贪心,一天有2种情况,分别是干净毛巾与脏毛巾,那么一个点2个状态显然困难,就将一天拆成2个点,一个点表示干净毛巾,一个表示脏毛巾,依旧是设源点汇点,源点向每天的脏毛巾点连capacity为产生的脏毛巾数,费用为0,每天的干净毛巾向汇点连 阅读全文
posted @ 2020-02-08 19:22 GRedComeT 阅读(115) 评论(0) 推荐(0)
摘要:好像是最大权闭合图,也就是最大流最小割啦,找出最大流的路径输出,这题如何建模呢,一样的先设源点和汇点,源点向每个计划连capacity为赞助数的边,每个计划连相应装置capacity为无穷的边,每个装置向汇点连capacity为支付费用的边,这样,最大利润就是赞助总数-最大流啦,如何证?看两个例子 阅读全文
posted @ 2020-02-08 17:01 GRedComeT 阅读(128) 评论(0) 推荐(0)
摘要:经典问题,货物供需平衡,很容易想到网络流,设源点和汇点,源点对每个仓库连一条capacity为仓库容量的边,cost为0,每个商店对汇点连一条capacity为需要的量的点,cost为0,每一个仓库与商店之间连一条capacity为无限大,cost为给定的边,直接跑最小费用最大流即可,求最大费用就去 阅读全文
posted @ 2020-02-07 23:19 GRedComeT 阅读(137) 评论(0) 推荐(0)
摘要:本题可以用最大流也可以用最大匹配(本质一样),用dinic最大流好建图,但码量大,匈牙利码量小,建图费点劲。 最大流:依旧是设一个源点一个汇点,对于每一个种类,连一条到汇点的边,capacity为需要的量,对于每一个试题,从源点连一条capacity为1的边到他,从他对每一个其所属的编号种类连一条c 阅读全文
posted @ 2020-02-07 22:26 GRedComeT 阅读(164) 评论(0) 推荐(0)
摘要:题目中没有说球的上限是多少,只告诉了柱子,那么我们就应该以柱子为界去增加球,考虑将每两个能组成完全平方数的点连边,就形成了一个DAG(有向无环图),由于是DAG,可以转换为最小覆盖问题,即最多有n条路径(柱子数),求其能覆盖的最大点数,最小覆盖路径 = 节点数 - 最大匹配数,可以将其拆成二分图跑匈 阅读全文
posted @ 2020-02-07 17:06 GRedComeT 阅读(111) 评论(0) 推荐(0)
摘要:本题有数学贪心解法和费用流解法 数学解法就看看luogu题解吧,窝太菜了 费用流就找建图法,依旧是设超级源点和汇点,初始数据就源点s向该点连点,流量就是初始量,代价为0,然后每个仓库向相邻的点连边,容量无限大,代价为1,再每个仓库向汇点连点,容量就是sum/n,代价为0,直接跑最大流最小费就行了,这 阅读全文
posted @ 2020-02-06 21:42 GRedComeT 阅读(144) 评论(0) 推荐(0)
摘要:#include<bits/stdc++.h> using namespace std; #define lowbit(x) ((x)&(-x)) typedef long long LL; const int maxm = 5e5+5; const int INF = 0x3f3f3f3f; st 阅读全文
posted @ 2020-02-06 21:09 GRedComeT 阅读(113) 评论(0) 推荐(0)