最小割
Icefox_zhx
这个作者很懒,什么都没留下…
展开
-
loj6001「网络流 24 题」太空飞行计划(最大权闭合图+最小割)
让所有实验向他所需的仪器连边,那么合法的方案就是原图的一个闭合子图。因此本题就是要求最大权闭合图。 最大权闭合图的通用解法:S到正权值的点连边,容量为其权值,负权值的点到T连边,容量为其绝对值,然后原图中的边容量为+∞,ans = 所有正权和 - 最小割,闭合子图为s所在集合的点。具体证明可以参考胡伯涛的论文。 因此本题再用最大流求个最小割就解决啦~至于s集合所在的点,就是最后一次bfs还能分层原创 2017-12-08 20:03:35 · 297 阅读 · 0 评论 -
bzoj3158 千钧一发(数学+最大点权独立集)
要求所选数满足条件A或B,等价于所选数没有既不满足A又不满足B的。那我们就把既不满足A,又不满足B的两个点之间连边。则我们就是要选出一个最大点权独立集。然后我们可以根据奇偶划分二分图,用最小割来做。类似这道题#include #include #include #include #include using namespace std;#define ll long long#d原创 2018-01-04 21:52:15 · 344 阅读 · 0 评论 -
bzoj2400 Spoj 839 Optimal Marks(最小割+贪心)
我们一位一位的来考虑。显然只有一条边的两端是0,1时才会产生贡献。即一条边的两端属于两个集合。这是不是很像最小割呢?我们令残余网络中,S集合为0,T集合为1.则本来这一位上就是0的建边S->x,inf。本来这一位上就是1的建边x->T,inf。然后把给出的无向边都建上,容量为1。最小割就是最小边权。那么我们如何保证最小点权呢?贪心的想,如果我们现在有多个最小割,那么点权最小的那个最小割一定是T集合最原创 2018-01-08 15:00:35 · 260 阅读 · 0 评论 -
bzoj4519 [Cqoi2016]不同的最小割(最小割树,分治)
求所有点对的最小割中,不同的最小割数值有多少个。我们建出等价流树,看这n-1个最小割有几个不同的就好啦。原创 2018-01-09 13:13:02 · 412 阅读 · 0 评论 -
bzoj2229 [Zjoi2011]最小割(最小割树,分治)
一个n个点的图,对于任意四点x,y,z,w,他们的最小割可以不相交。这样我们就可以分治的来求出等价流树。等价流树就是这样一棵树,使得图中两个点的最小割的权就是树上对应链上的最小边权。好像和最小割树不太一样?怎么分治呢?首先对于点集V,我们钦定一个S和T,跑最小割,把原图分成S集和T集,更新所有目前被割开的点的最小割,然后再分治S集和T集。如果要建出这棵树呢?就是每次求出S到T最小割以后,建边(S,原创 2018-01-09 11:38:36 · 348 阅读 · 0 评论 -
bzoj3894 文理分科(最小割)
令S集为选文,T集为选理。则单科满意度很好建边。问题是一个集合一起选一科的贡献怎么办呢?先考虑理科,我们对每个这样的集合新建一个点x,向T建边,容量为贡献,集合中的每一个点向x建边,容量为inf,表示只要有一个人选了文就得把这个贡献割掉。一个集合的人选文的贡献同理。这样不可能出现一个人既吃到了周围人全选理的贡献,又吃到了周围人全选文的贡献。因为如果这样的话,原图一定还联通。#include原创 2018-01-09 14:14:22 · 439 阅读 · 0 评论 -
bzoj3774 最优选择(二分图+最小割)
这题好神啊。 学到了一点:将“或”连接的条件串联起来,至少割掉一条边=这些条件至少满足一个。 本题:对于每一个点,有三种情况 A、放弃这个点的收入 B、付出占领这个点的代价 C、付出占领这个点周围四个点的代价 那么A、B、C应当连在一条路径上。 注意到A和C显然是对称的,因此需要对原图进行黑白染色,然后把A类边和C类边放在两边。 因此我们首先对原图黑白染色,原创 2018-01-09 22:17:37 · 537 阅读 · 0 评论 -
bzoj1163 [Baltic2008]Mafia(最小割)
拆点,把点权变成边权,然后跑最小割就是答案了。原创 2018-01-09 22:30:45 · 331 阅读 · 0 评论 -
bzoj1339 [Baltic2008]Mafia(最小割)
拆点,把点权变成边权,然后跑最小割就是答案了。原创 2018-01-09 22:32:16 · 338 阅读 · 0 评论 -
luogu1361 小M的作物(最小割)
类似bzoj3894,S向每个点建边,容量为种在A的收益,每个点向T建边,容量为种在B的收益,对于每一个点,我们必然要割掉连向S或T的一条且仅一条边。对于割之后的图,S集的点均选择了种在A,T集的点均选择了种在B。那对于共同种在A地有额外收益的点怎么办呢?,我们新建一个点x,S向x连边,容量为收益,x向所有需要共同种在A的点连边,容量为inf,则如果这些点有一个点没有割掉向T的连边,我们势必要割掉收原创 2018-01-19 15:59:57 · 464 阅读 · 0 评论 -
bzoj1797 [Ahoi2009]最小割(最小割+tarjan缩点)
拖了一个世纪的题。嗯。 求最小割,问每一条边是否可能是割边,是否一定是割边。 我们先跑一遍dinic,然后对残余网络进行scc缩点。结论如下:1.如果(u,v)可能被割掉,则scc[u]!=scc[v] 2.如果(u,v)一定被割掉,则scc[u]=scc[S],scc[v]=scc[T]为什么呢?首先割边一定是满流边。 因为不满流的边一定不是割边,一定有更优的。这个想一想还是可以理解的。其原创 2018-02-20 22:20:18 · 347 阅读 · 0 评论 -
bzoj3996 [TJOI2015]线性代数(最小割)
搞一下式子,发现答案就是 (∑ni=1∑nj=1Bij×Ai×Aj–∑ni=1Ai×Ci)(\sum_{i=1}^n \sum_{j=1}^n B_{ij} \times A_i \times A_j – \sum_{i=1}^n A_i \times C_i ) 就是一个最大权闭合子图模型,我们来跑最小割就好了。原创 2018-02-23 14:01:07 · 274 阅读 · 0 评论 -
bzoj5037 [Jsoi2014]电信网络(最小割)
就是求一个最大权闭合子图。原创 2018-04-22 20:01:06 · 232 阅读 · 0 评论 -
bzoj4873 [Shoi2017]寿司餐厅(最小割)
(i,j)->(i+1,j) (i,j)->(i,j-1) (i,i)->a[i] (i,i)权值为d[i][i]-a[i],为每一个标号a[i]新建一个节点,权值为−ma[i]2-ma[i]^2 那么答案就是最大权闭合子图。原创 2018-04-23 22:32:22 · 218 阅读 · 0 评论 -
bzoj1312 Neerc2006 Hard Life(01规划+最小割)
求最大密度子图,子图密度定义为边数/点数。 01规划,我们二分答案mid,如果E/V>midE/V>midE/V>mid,那么有E−V∗mid>0E−V∗mid>0E-V*mid>0 于是我们可以把每条边看做一个点,点权为1,每个点点权为-mid,选了一条边必须选这条边的两个端点。 那么就是求一个最大权闭合子图,看他是否>0。 最小割即可。注意此题要输出最多点...原创 2018-05-17 11:01:41 · 330 阅读 · 0 评论 -
bzoj3218 a + b Problem(主席树优化建图+最小割)
首先我们考虑朴素建图,S->i,bi ; i->T,wi ; i->i’,pi ; i’->j,inf,如果j会使得i变奇怪。 但是这样最后一类边可能O(n2)O(n^2),gg 我们考虑主席树优化即可。 点数O(2n+nlogn)O(2n+nlogn) 边数O(2nlogn+4n+nlogn)O(2nlogn+4n+nlogn)原创 2018-04-27 08:52:20 · 326 阅读 · 0 评论 -
bzoj3258 秘密任务(Dij+最小割+tarjan)
首先跑两边Dijkstra,只留下一定存在在最短路上的边。 然后把一条边拆成两条边,权值分别为起终点的权值。 现在我们就是要花最小的代价把1,n割开,于是求一个最小割。 还要判定最小割是否唯一。可以对残余网络tarjan缩点。 如果一条边是割边,那么需要满足: 1、满流边 2、bel[x]!=bel[y] 如果还满足bel[x]==bel[s]&&bel[y]==be...原创 2018-06-13 12:27:38 · 366 阅读 · 0 评论 -
poj2125 Destroying The Graph(二分图最小点权覆盖集,最小割输出割边)
把每个点分成入和出,显然是张二分图,就是求最小点权覆盖集,可以用最小割解决。问题在于输出最小割的割边。蒟蒻才发现以前自己的理解是不正确的。 最小割的割边一定满流是没有错的,但是反过来,满流的边就是割边是错误的。比如你看s->x->y->t,容量都相同。则割边一条即可,无需所有满流的三条边。那如何找到割边呢? 在残余网络上从s开始跑一遍dfs,可以到的点都是属于S集合的。然后枚举每一条边x->y,原创 2017-12-28 15:50:31 · 450 阅读 · 0 评论 -
bzoj1324 Exca王者之剑(构造+最小割)
论文题。 大概就是首先可以发现只有偶数时刻才有可能吃到宝石,然后相邻的格子内的宝石不可能都吃到。然后就想到了最大点权独立集,然后构造证明任意独立集都可以实现。详见2007Amber国家队论文。原创 2017-12-28 14:12:28 · 390 阅读 · 0 评论 -
bzoj2007 [Noi2010]海拔(平面图最小割转对偶图最短路)
我们发现其实所有的海拔非0即1,什么四舍五入到整数,都是骗人的!然后我们显然发现,所有的0都和左上角相连,所有的1都是右下角相连,而唯一有贡献的流量就是0->1的流量,是不是很像最小割!所以我们就是要求一个平面图的最小割!但是,点太多了!我们可以像狼抓兔子那题一样,转化为对偶图求最短路即可。Dijkstra会更快些。spfa加优化也可以过。原创 2018-01-03 17:34:00 · 398 阅读 · 0 评论 -
bzoj3144 [Hnoi2013]切糕(最小割)
这个题解写的不错,有图:传送门 我们相当于有p*q个点,每个点有不同的取值,需要不同的代价,然后相邻的点取值有一些限制。我们可以把每个点拆成r+1个点,(x,y,z)->(x,y,z+1)连边,容量为a[x][y][z],s向所有的(x,y,1)连边,容量为inf,所有的(x,y,r+1)向T连边,容量为inf,不考虑高度限制的话,当前图的最小割就是答案。然后我们怎么实现高度的限制呢?(x,y,z原创 2017-12-09 11:57:07 · 258 阅读 · 0 评论 -
loj6007「网络流 24 题」方格取数(最大点权独立集+最小割)
首先把网格图按(i+j)%2黑白染色,连成二分图。则答案要求的就是此图的最大点权独立集。 二分图最大点权独立集:从图中找到权值和最大的点集,使得它们之间两两没有边。 二分图最小点权覆盖集:从图中选取一些点,使这些点覆盖所有的边,并且选出来的点的权值尽可能小。 其实二分图最大点权独立集是二分图最小点权覆盖集的对偶问题。即是总权值-二分图最小点权覆盖集。 那么如何求二分图最小点权覆盖集呢?我原创 2017-12-09 15:51:03 · 501 阅读 · 0 评论 -
12.04 Day10
T1.针老师 可以发现,对于一个确定的拓扑序可以分成三部分: 00000001111111122222222 其中1表示选择的一段 假设给每个点都设一个值col[i]=0/1/2,那么如果DAG中存在i->j的边,那么必定有co[i]<=col[j]。 于是可以网络流。类似bzoj3144的建图。 相当于分成了3层,把每个点拆成两个,建边i->i’,容量为base-w[i],s->i,容原创 2017-12-20 16:46:05 · 393 阅读 · 1 评论 -
bzoj1497 [NOI2006]最大获利(最大权闭合图,最小割)
和loj6001一模一样,就是求一个最大权闭合图。做法:传送门原创 2017-12-24 21:21:18 · 275 阅读 · 0 评论 -
bzoj1412 [ZJOI2009]狼和羊的故事(最小割)
显然就是要把狼和羊隔开,源向狼建边,容量为inf,羊向汇建边,容量为inf,保证他俩最后肯定被隔开。然后一个格子向四周建边,容量为1.最后最小割就是答案。原创 2017-12-24 21:46:04 · 410 阅读 · 0 评论 -
bzoj1934 [Shoi2007]Vote 善意的投票(最小割)
s向1的点建边,容量为1,0的点向T建边,容量为1,对于所有朋友关系:如果原来意见相同,就建双向边,容量为1,否则建边由1指向0,容量为1。最小割就是答案。最后s集合都是1,T集合都是0.原创 2017-12-25 08:09:24 · 334 阅读 · 0 评论 -
bzoj2132 圈地计划(最小割)
首先假设我们把所有收益都吃了x。然后删掉最少的收益使得方案合法。 二分图染色,黑点向T建边,容量为a,s向黑点建边,容量为b,白点向T建边,容量为b,s向白点建边,容量为a,白点向相邻的黑点建双向边,容量为两点c之和。全部收益-最小割就是答案。因为这样的话你至少会删掉每个点的其中一种建筑,保证每个位置只建了一个。而且如果你使得相邻的两个位置建了相同的建筑,一定还会删掉他俩之间的边的贡献。原创 2017-12-25 09:07:12 · 298 阅读 · 0 评论 -
bzoj2127 happiness(最小割)
这题好神啊orz。 hzw题解传送门:http://hzwer.com/2422.html利用最小割考虑。对于原图中所有相邻的两个人A,B,我们建边:s->A:cost[A文]+c[文][A][B]/2,s->B:cost[B文]+c[文][A][B]/2;A->t:cost[A理]+c[理][A][B]/2,B->t:costB[理]+c[理][A][B]/2;A<–>B:c[文][A][B]/原创 2017-12-25 10:16:49 · 279 阅读 · 0 评论 -
bzoj1391 [Ceoi2008]order(最小割)
思想类似最大权闭合图,但不是很一样。源向所有工作建边,容量为获利,所有机器向汇建边,容量为价格,所有工作向所需机器建边,容量为租金。正权和-最小割就是答案。正确性比较显然。原创 2017-12-25 11:13:09 · 445 阅读 · 0 评论 -
bzoj2768 [JLOI2010]冠军调查(最小割,和bzoj1934一模一样)
bzoj2768 [JLOI2010]冠军调查(最小割,和bzoj1934一模一样) 传送门:http://blog.csdn.net/icefox_zhx/article/details/78888901原创 2017-12-25 11:27:42 · 338 阅读 · 0 评论 -
bzoj3275 Number(最大点权独立集)
显然是求个最大点权独立集。数学一下,肯定是一奇一偶才能凑成合法。所以可以根据奇偶二分染色。然后就是套路了。传送门原创 2017-12-25 12:59:35 · 380 阅读 · 0 评论 -
loj6226「网络流 24 题」骑士共存问题(二分图最大点独立集,最小割)
把可以互相攻击到的点之间连一条边,我们可以发现这是一张二分图(不存在奇环),答案就是最大点独立集(不能互相攻击到,等价于所选点之间不能有边)。也就是所有点-最小覆盖集。而二分图的最小覆盖集就是s向左边点连边,容量为1,右边点向T连边,容量为1,原来的边从左指向右,容量为inf,建图后的最小割。这题怎么二分图染色呢?可以发现,马如果从(x,y)->(xx,yy),则(x+y)和(xx+yy)的奇偶性一原创 2017-12-18 10:06:00 · 638 阅读 · 0 评论 -
luogu3872 [TJOI2010]电影迷(最小割)
我是类似这道题想到的建图方法。因为有负权,所以我用delta都先减他们一下,都变成正权,使原点权和最大,就变成了使现点权和最小,就可以用最小割啦。S向所有点建边,容量为delta,唤作第一层,所有点向T建边,容量为delta-点权,唤作第二层。对于有限制的边,建边x->y,容量为val。对于每个点,第一二层必割一条,割第一层,就代表不选这个点,割第二层,就代表选这个点。如果x选了,y没选,x->y有原创 2018-01-02 09:46:40 · 529 阅读 · 1 评论 -
bzoj1001 [BeiJing2006]狼抓兔子(最小割/平面图最大流转对偶图最短路)
首先这题显然就是求一个最小割。然后跑dinic加点优化也是可以过的。这题还有一种更妙的做法:st平面图最大流转对偶图最短路。大概做法就是首先在原图中加一条s->t的边,然后把原图的一个面当作一个点,每条边连接两个面,在对偶图中就是连接相应的点。然后对偶图中的一个环对应了原图的一个割。特别的,如果不看s->t这条边的话,对偶图中s->t的一个最短路就是原图的最小割。然后直接求最短路就好了。边数是和原图原创 2017-12-18 17:23:06 · 421 阅读 · 0 评论 -
bzoj2561 最小生成树(最小生成树+最小割)
首先考虑让L出现在最小生成树中。则边权比L小的所有边不能使得u,v联通。否则加入L,在环上一定是去掉L最优。所以跑个最小割就是答案。最大生成树同理,两个答案相加就是答案。原创 2017-12-28 09:32:33 · 377 阅读 · 0 评论 -
bzoj1565 [NOI2009]植物大战僵尸(拓扑序+最大权闭合子图,最小割)
给出一些限制关系,我们先搞出哪些植物不可能被吃。假设僵尸不管能量,把能吃的都吃了,看哪些剩下来即可,可以用拓扑序来做。然后对于能吃到的植物导出的图,把边都反过来,就是求一个最大权闭合子图。用最小割求即可。原创 2018-01-03 16:21:21 · 305 阅读 · 0 评论 -
bzoj3630 [JLOI2014]镜面通道(计算几何+最小割)
首先你要知道这样一个物理学结论:【水能流过的地方,光也能经过】 于是乎只要左右连通就可以了。 对偶一下,就是只要上下界不要连通就可以了。 于是建图最小割,把每个点拆点,i->i+n,1 如果与上界有交就连边S->i,inf 如果与下界有交就连边i+n->T,inf 如果i,j相交了就互相连边。 然后此题毒瘤的地方就在于各种判交… 你需要耐心… 数据比较友好,没有...原创 2018-06-13 22:39:04 · 224 阅读 · 0 评论