![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
【算法】最大流最小割定理
文章平均质量分 66
cz_xuyixuan
这个作者很懒,什么都没留下…
展开
-
【BZOJ1001】【BeiJing2006】狼抓兔子
【题目链接】点击打开链接【思路要点】直接运行\(Dinic\)算法即可,注意内存限制。本题使用\(std::vector\)离奇\(Runtime Error\),令笔者不解。本题也可以将最大流问题对偶为最小割,使用最短路算法求解,复杂度为\(O(N*MLogN*M)\)。【代码】#includeusing namesp原创 2018-01-12 10:10:18 · 331 阅读 · 0 评论 -
【BZOJ4519】【CQOI2016】不同的最小割
【题目链接】 点击打开链接 【思路要点】 GomoryHu-Tree模板题。 时间复杂度O(N∗Dinic(N,M))O(N∗Dinic(N,M))O(N*Dinic(N,M))。 【代码】 #include<bits/stdc++.h>using namespace std;#define MAXN 1005...原创 2018-07-03 11:20:38 · 238 阅读 · 0 评论 -
【BZOJ2229】【ZJOI2011】最小割
【题目链接】 点击打开链接 【思路要点】 建出GomoryHu-Tree ,剩余部分用DFS即可解决。 时间复杂度O(T∗(N∗Dinic(N,M)+NQ))O(T∗(N∗Dinic(N,M)+NQ))O(T*(N*Dinic(N,M)+NQ))。 【代码】 #include<bits/stdc++.h>using na...原创 2018-07-03 14:01:04 · 203 阅读 · 0 评论 -
【BZOJ4435】【Cerc2015】Juice Junctions
【题目链接】 点击打开链接 【思路要点】 建出GomoryHu-Tree ,剩余部分用DFS即可解决。 时间复杂度O(N∗Dinic(N,M)+N2)O(N∗Dinic(N,M)+N2)O(N*Dinic(N,M)+N^2),由于最大流至多为3,因此Dinic(N,M)=O(N+M)Dinic(N,M)=O(N+M)Dinic(N,M)=O(N+M)。 ...原创 2018-07-03 20:34:16 · 358 阅读 · 0 评论 -
【BZOJ2561】最小生成树
【题目链接】 点击打开链接 【思路要点】 比较显然的最小割,即删去最少的边,使得xxx和yyy通过小于和大于给定边边权的边都不连通。 时间复杂度O(Dinic(N,M))O(Dinic(N,M))O(Dinic(N,M))。 【代码】 #include<bits/stdc++.h>using namespace std;...原创 2018-07-04 20:48:52 · 325 阅读 · 0 评论 -
【BZOJ2521】【SHOI2010】最小生成树
【题目链接】 点击打开链接 【思路要点】 题目中的操作等价于对一条边权值加一。 问题转化为了,每条边有一个删去的代价,花费最少的代价,使得xxx和yyy通过除给定边以外小于等于给定边边权的边不连通。 最小割即可。 时间复杂度O(Dinic(N,M))O(Dinic(N,M))O(Dinic(N,M))。 【代码】 #includ...原创 2018-07-04 20:55:20 · 186 阅读 · 0 评论 -
【CodeForces】CodeForces Round #406 (Div. 1) 题解
【比赛链接】点击打开连接【题解链接】点击打开链接**【A】**Berzerk【思路要点】博弈搜索,将状态按先后手拆点,建出游戏图。若一个点存在出边指向必败态,则该点为必胜态。若一个点所有出边指向必胜态,则该点为必败态。不满足上述两点的点为平局态。用一个类似拓扑排序的过程实现即可。时间复杂度 O(N2)O(N^2)O(N2) 。【代码】#inclu...原创 2018-09-27 18:13:18 · 332 阅读 · 0 评论 -
【CodeForces】Mail.Ru Cup 2018 Round 1 (Div. 1 + Div. 2) 题解
【比赛链接】点击打开连接【题解链接】点击打开链接**【A】**Elevator or Stairs?【思路要点】按照题意计算两种方式的用时,取较优的方案采纳。时间复杂度 O(1)O(1)O(1) 。【代码】#include<bits/stdc++.h>using namespace std;const int MAXN = 2e5 + 5...原创 2018-10-21 14:28:31 · 794 阅读 · 1 评论 -
【省内训练2018-12-23】Tree
【思路要点】显然有最小割的模型,建图时只需要判断树上两条路径是否有交即可。时间复杂度 O(NLogN+Dinic(M1+M2,M1∗M2))O(NLogN+Dinic(M_1+M_2,M_1*M_2))O(NLogN+Dinic(M1+M2,M1∗M2)) 。【代码】#include<bits/stdc++.h>using namespace std;co...原创 2018-12-23 17:16:30 · 269 阅读 · 0 评论 -
【BZOJ3996】【TJOI2015】线性代数
【题目链接】点击打开链接【思路要点】补档博客,无题解。【代码】#include<bits/stdc++.h>using namespace std;#define MAXN 505#define MAXP 300005#define INF 1e9template <typename T> void read(T &x) { x = 0; int f =...原创 2018-06-21 20:54:19 · 245 阅读 · 0 评论 -
【BZOJ3532】【SDOI2014】Lis
【题目链接】点击打开链接【思路要点】DP+拆点最小割可以解决第一问。按\(C_i\)从小到大考虑每一个点是否可以在最优解中被删除。首先,若该点内部的边没有满流,那么这条边一定不在最小割上,故该点不可能在最优解中被删除。否则我们考虑退掉该点内部边的在残量网络上的流量,并将其删去。具体退流的过程可以通过从汇点到该点出点,以及该点入点到源点各做一次流量限制为该点内部边的容量的最大流。若该点在最优解中可以...原创 2018-05-23 20:36:34 · 267 阅读 · 0 评论 -
【BZOJ5032】【JSOI2014】病毒分类
【题目链接】点击打开链接【思路要点】显然,仅按照前缀/后缀对字符串的分类方式是唯一的,可以通过对字符串进行排序完成分类。考虑最小割,将每个点与源点间用前缀分类方式连边,与汇点间用后缀分类方式连边,运行最小割即可。通过最小割的割集可以轻松构造方案。BZOJ没有SPJ,无法正确评测本题,以下代码由笔者本人测试通过。时间复杂度\(O(NKLogN+Dinic(N,N))\)。【代码】#include&l...原创 2018-04-24 12:49:06 · 218 阅读 · 0 评论 -
【BZOJ3144】【HNOI2013】切糕
【题目链接】点击打开链接【思路要点】若距离限制\(D≥N\),显然我们可以通过取每一条纵轴上的最小值求解,但我们也可以将每一条纵轴上的的权值首尾相连,形成一条有向链,将链首与链尾分别于源点和汇点用容量无穷的边相连,用最小割求解。现在考虑距离限制\(D\),若将相邻纵轴上距离恰好为\(D\)的点从较后者向较前者连一条容量无穷的边,在最小割问题中就表示不原创 2018-01-12 10:55:44 · 368 阅读 · 0 评论 -
【BZOJ1497】【NOI2006】最大获利
【题目链接】点击打开链接【思路要点】直接解最大权闭合子图问题即可。时间复杂度\(O(Dinic(N+M,N+3*M))\)。【代码】#includeusing namespace std;const int MAXP = 60005;const int INF = 1e9;template void read(T &原创 2018-01-15 09:45:00 · 306 阅读 · 0 评论 -
【BZOJ3438】小M的作物
【题目链接】点击打开链接【思路要点】题目中的一类增益可以归结为“若某些元素的选取状态为0/1,那么额外获得收益”,考虑最大权闭合子图问题。对于一个种子,为了获得最大收益,我们显然一定要将它种下去。如果我们默认“选取”的意义是种在A田中,“不取”的意义是种在B田中,那么其“选取”得到的真正的权值为\(V_{a}-V_{b}\)。考虑增益条件,一个增益条原创 2018-01-15 10:46:58 · 366 阅读 · 0 评论 -
【BZOJ1565】【NOI2009】植物大战僵尸
【题目链接】点击打开链接【思路要点】题目中的限制可以总结为“若选取A,则必须选取B”,考虑最大权闭合子图问题。但是我们从样例中发现原图是可能存在环的,而最大权闭合子图问题要求原图是一个有向无环图。进一步分析发现,环上的元素是必然不能选取的,进而连向不能选的元素的元素同样不能选。进行一次DFS,确定每个元素是否可选,在可选的元素中建图,解最大权闭合子图原创 2018-01-15 09:01:59 · 397 阅读 · 0 评论 -
【BZOJ2127】Happiness
【题目链接】点击打开链接【思路要点】题目中的一类增益可以归结为“若某些元素的选取状态为0/1,那么额外获得收益”,考虑最大权闭合子图问题。对于一个同学,如果我们默认“选取”的意义是选择文科,“不取”的意义是选择理科,那么其“选取”得到的真正的权值为\(V_{文科}-V_{理科}\)。考虑增益条件,一个增益条件可以拆分为两个形如“若某些元素选取,那原创 2018-01-16 10:21:35 · 287 阅读 · 0 评论 -
【BZOJ4873】【SHOI2017】寿司餐厅
【题目链接】点击打开链接【思路要点】挺裸的最大权闭合子图。若选取区间\([L,R](L<R)\),则必须选取区间\([L,R-1]\),\([L+1,R]\)。区间\([i,i]\)的权值应当减去\(a_i\),这里是考虑额外代价的\(cx\)部分。同时,选取任何一个或多个\(a_i=j\)的区间\([i,i]\),会额外付出\(m*j^2\)的代价,由区间\([i,i]\)向\(j\)连边...原创 2018-03-23 20:44:35 · 229 阅读 · 0 评论 -
【BZOJ4857】【JSOI2016】反质数序列
【题目链接】点击打开链接【思路要点】首先,最终序列中至多有一个1,其余各数要么不选,要么全选。将数字按照奇偶性分类,和为质数的数对连边,那么将形成一张二分图。求解二分图的最大独立集即可。时间复杂度\(O(A_i+Dinic(N,N^2))\),并且实际上图中边数完全无法达到上界。【代码】#include<bits/stdc++.h>using namespace std;const...原创 2018-04-14 17:34:39 · 508 阅读 · 0 评论 -
【BZOJ4485】【JSOI2015】圈地
【题目链接】点击打开链接【思路要点】先默认每一栋房子都会卖出,卖给A的向源点连边,卖给B的向汇点连边,边权分别为房价的绝对值。相邻的房子连边,边权为围墙造价,用总房价减最小割即为答案。时间复杂度\(O(Dinic(N*M,N*M))\)。【代码】#include<bits/stdc++.h>using namespace std;const int MAXN = 205;cons...原创 2018-04-18 14:39:33 · 444 阅读 · 1 评论 -
【UOJ77】A + B Problem
【题目链接】点击打开链接【思路要点】最小割,考虑在为每个元素 iii 在源汇之间建点 pointi,0point_{i,0}pointi,0 ,连边 (s,pointi,0,bi),(t,pointi,1,wi)(s,point_{i,0},b_i),(t,point_{i,1},w_i)(s,pointi,0,bi),(t,pointi,1,wi) ,此时的最小割即为...原创 2019-07-04 13:46:25 · 301 阅读 · 0 评论