随笔分类 -  5.10.0 网络流

摘要:```cpp include include include include include include include using namespace std; const int MAXN = 5005; int init() { int rv = 0, fh = 1; char c = g 阅读全文
posted @ 2018-04-04 10:09 Mr_Wolfram 阅读(104) 评论(0) 推荐(0)
摘要:最大权闭合子图,神题 这不是线性代数,这是网络流。 我们看见这是一堆矩阵的运算,而且最后变成了一个数,那么我们就想到,把这个矩阵乘法的过程用具体的数字推出来 我们发现,a是一个01矩阵,然后其实就可以化成这么一个问题: 有n个东西,选了i,j两件东西能得到b[i,j]的价值,然而选i需要c[i]的花 阅读全文
posted @ 2018-02-11 21:37 Mr_Wolfram 阅读(240) 评论(0) 推荐(1)
摘要:有上下界的最小费用最大流 可以联想到供求平衡问题,所以我们要拆点做这道题 把每天分为二分图两个集合中的顶点Xi,Yi,建立附加源S汇T。 1、从S向每个Xi连一条容量为ri,费用为0的有向边。 2、从每个Yi向T连一条容量为ri,费用为0的有向边。 3、从S向每个Yi连一条容量为无穷大,费用为p的有 阅读全文
posted @ 2018-01-26 16:50 Mr_Wolfram 阅读(119) 评论(0) 推荐(0)
摘要:最大权闭合子图 胡伯涛论文真是个好东西.jpg 求一个有向图的最大权闭合子图,常应用于有先决条件的最优化问题中 将所有正权点与源点相连,容量为点权; 将所有负权点与汇点相连,容量为点权的相反数; 将原图中的边相连,容量为INF 可以发现,所有正点权之和 最小割即为答案 证明见胡伯涛论文 如何输出该子 阅读全文
posted @ 2018-01-26 11:27 Mr_Wolfram 阅读(188) 评论(0) 推荐(0)
摘要:状压+BFS 通过观察数据范围可知,我们应该状压钥匙种类,直接BFS即可 注意,一个点处可能不知有一把钥匙 阅读全文
posted @ 2018-01-25 20:25 Mr_Wolfram 阅读(246) 评论(0) 推荐(0)
摘要:简单最大流建图 cpp include include include include include include using namespace std; const int MAXN=600,MAXM=2000005; int head[MAXN],cur[MAXN],n,m,s,t,num 阅读全文
posted @ 2018-01-25 16:16 Mr_Wolfram 阅读(148) 评论(0) 推荐(0)
摘要:二分图最大点权独立集 通过题目描述我们可以很明显的看出要通过二分图建模,二分图求最大独立点集很容易,就是建立二分图求n 最小割,然而这里加入了权值,而且权值是在点上的,那么我们对于每个点连一条到源点或汇点的容量等于权值的边,求最小割即可,见胡伯涛论文 cpp include include incl 阅读全文
posted @ 2018-01-25 15:39 Mr_Wolfram 阅读(195) 评论(0) 推荐(0)
摘要:二分图求最大独立点集 本问题在二分图中已处理过,此处用dinic写了一遍 cpp include include include include include include using namespace std; const int MAXN=40005,MAXM=5000005; int s 阅读全文
posted @ 2018-01-25 11:40 Mr_Wolfram 阅读(174) 评论(0) 推荐(0)
摘要:啊啊啊,再把MAXN和MAXM搞反我就退役 层次图求不相交路径数 第一问简单DP 第二问想办法把每一个不上升子序列转化成DAG上的一条路径,就转换成了求不相交路径数 因为每一个数只能用一次,所以要拆点 对与dp[i]==1连一条从s到i的边,对于dp[i]==ans1连一条从i到t的边 对于dp[j 阅读全文
posted @ 2018-01-24 21:06 Mr_Wolfram 阅读(239) 评论(0) 推荐(0)
摘要:二分图应用模版 cpp include include include include include include using namespace std; const int MAXN=400,MAXM=50005; int head[MAXN],nume,n,m,maxflow,s,t,cu 阅读全文
posted @ 2018-01-24 18:42 Mr_Wolfram 阅读(154) 评论(0) 推荐(0)
摘要:非常舒适的最大流 非常显然的建图方法,然而因为数组开小卡了很长时间 cpp include include include include include include using namespace std; const int MAXN=2500,MAXM=100005; int head[M 阅读全文
posted @ 2018-01-24 18:24 Mr_Wolfram 阅读(211) 评论(0) 推荐(0)
摘要:贪心做法 每次尽可能选择已经放过球的柱子 cpp include include include include include using namespace std; int num[100][1000],n; bool chk(const int &a,const int &b){ int t 阅读全文
posted @ 2018-01-24 15:16 Mr_Wolfram 阅读(170) 评论(0) 推荐(0)
摘要:贪心做法 第一眼看见觉得和均分纸牌差不多,然而因为这是环形的,并不能用均分纸牌的方法做,但是均分纸牌的思想仍然适用 首先我们假设平均数为sum1。 那么对于第1个人,我们假设他给第N个人K个糖果, 第2个人给1 第3个人给2 第n个人给第n 1个人 那么对于第1个人给完n,第2个人给完1,第一个人不 阅读全文
posted @ 2018-01-24 10:56 Mr_Wolfram 阅读(186) 评论(0) 推荐(0)
摘要:并不是网络流 状压+SPFA 通过题目中的描述及数据范围可知,我们状压当前的漏洞,以每个二进制位表示是否有这个漏洞,并以状压的结果为顶点,以补丁的时间为边跑SPFA即可 cpp include include include include include using namespace std; 阅读全文
posted @ 2018-01-23 16:21 Mr_Wolfram 阅读(205) 评论(0) 推荐(0)
摘要:网络流实现二分图匹配 对于x集合的每一个点连一条从源点出发的容量为一的边,对于y集合的每一个点连一条到汇点的容量为一的边,跑最大流 cpp include include include include include include include using namespace std; con 阅读全文
posted @ 2018-01-22 18:25 Mr_Wolfram 阅读(191) 评论(0) 推荐(0)
摘要:先连一条从汇点到源点的容量为INF的边,将其转化成无源汇点有上下界的可行流,判断是否可行 若可行的话删掉超级源点和超级汇点,再跑一遍最大流即可 cpp include include include include include include include using namespace st 阅读全文
posted @ 2018-01-20 11:01 Mr_Wolfram 阅读(167) 评论(0) 推荐(0)
摘要:对于有上下界的网络流来说,我们可以分离出必要弧,然后将必要弧切开,两端分别连接源点和汇点,原图有可行解充要于源点或汇点满流. 这样求下来,只能求出可行流 cpp include include include include include include include using namespa 阅读全文
posted @ 2018-01-19 21:38 Mr_Wolfram 阅读(153) 评论(0) 推荐(0)
摘要:朴素dinic+多路增广 cpp include include include include include include using namespace std; const int MAXM=100005,MAXN=10005; int init(){ int rv=0,fh=1; cha 阅读全文
posted @ 2018-01-18 16:35 Mr_Wolfram 阅读(157) 评论(0) 推荐(0)
摘要:EK算法基于增广路的思想,易于理解,但由于低效并不被经常使用 cpp include include include include include include using namespace std; const int MAXN=10005,MAXM=100005; int n,m,s,fl 阅读全文
posted @ 2018-01-17 21:56 Mr_Wolfram 阅读(168) 评论(0) 推荐(0)