网络流
文章平均质量分 74
酷酷的Herio
这个作者很懒,什么都没留下…
展开
-
F - Zebraness(最小割)
F - Zebraness(最小割)题意给定n×nn\times nn×n矩阵,每个格子为B,WB,WB,W或者?,?可以填任意颜色。求最大相邻格子不同色的对数。思路最小割问题,但是不同色有贡献不能转化为该问题,所以我们需要转换一下题目,也就是该为同色加分,如何转换,只需把(i+j)(i+j)(i+j)为奇数的格子全部翻转即可,这样原来加分的对数就不会加分,原来不会加分的对数就会加分。因此可以用最小割。图形化一下:与BBB相连的被填成BBB,与WWW相连的被填成WWW,我们用infinfi原创 2021-03-02 12:22:37 · 404 阅读 · 0 评论 -
P3305 [SDOI2013]费用流(最大流&二分)
P3305 [SDOI2013]费用流(最大流&二分)思路:根据题意,BobBobBob肯定会选择容量最大的一条边全部加到它上面,根据贪心,我们可以二分每条边的容量,找到最小的容量使其满足最大流的情况即可,实数二分,注意误差要开大点,一般小数后四位,epsepseps就是六位以上,也就是最少加222位,或者直接二分100次。#include<bits/stdc++.h>using namespace std;typedef long long ll;const int N=1原创 2020-12-22 20:13:55 · 300 阅读 · 0 评论 -
P3171 [CQOI2015]网络吞吐量(spfa&最大流)
P3171 [CQOI2015]网络吞吐量(spfa&最大流)思路:跑完spfaspfaspfa之后重新建图,因为是点权,需要拆点跑网络流,具体做法是i,i+ni,i+ni,i+n连点权aia_iai,点1,n1,n1,n连infinfinf,因为这两个点是源点和汇点,然后其他的最短路的边按照原来的建边,最后跑个最大流即可。#include<bits/stdc++.h>using namespace std;typedef long long ll;const int N=1原创 2020-12-22 17:23:16 · 342 阅读 · 0 评论 -
P2604 [ZJOI2010]网络扩容(MCMF)
P2604 [ZJOI2010]网络扩容(MCMF)思路:第一问求最大流跑dinicdinicdinic即可。第二问转换为每条边容量无限,新建一个源点到111容量为kkk,然后跑MCMFMCMFMCMF得到MFMFMF即可,这里我是EKEKEK上跑spfaspfaspfa实现。#include<bits/stdc++.h>using namespace std;typedef long long ll;const int N=1e3+5,M=3e4+5,inf=0x3f3f3f3f,原创 2020-12-22 16:42:00 · 274 阅读 · 0 评论 -
P4174 [NOI2006]最大获利
P4174 [NOI2006]最大获利最大权闭合子图的大水题。#include<bits/stdc++.h>using namespace std;typedef long long ll;const int N=1e5+5,M=2e4+5,inf=0x3f3f3f3f,mod=1e9+7;#define mst(a,b) memset(a,b,sizeof a)#define PII pair<int,int>#define fi first#define se原创 2020-12-22 13:55:25 · 224 阅读 · 0 评论 -
P2805 [NOI2009]植物大战僵尸 (最大权闭合子图&最小割)
P2805 [NOI2009]植物大战僵尸 (最大权闭合子图&最小割)思路:找到每个植物可以保护的植物,即选择这些植物时,必须选择该植物,满足闭合子图性质,然后建图,源点连正权点,负权点连汇点。此外需要去掉图的环,因为环上的植物可以相互保护,可以拓扑排序然后取标记过点重新建图即可,最后跑个最大流即可。时间复杂度:O(n2m)O(n^2m)O(n2m)#include<bits/stdc++.h>using namespace std;typedef long long ll;原创 2020-12-22 13:46:38 · 330 阅读 · 0 评论 -
网络流复习
网络流复习1.前言几个月没碰过网络流了,想她了,所以捡起来,这么好的东西怎么能不用?2.前置知识网络流是啥? 网络流是给定一个有向图,每条边有一个容量,这个图还有一个起点叫源点,一个终点叫汇点。把有向图想象成有多条路径的水流管道图,每条边的容量就是能经过该边的最大水流的流量。最大流是啥?最大流就是从源点能流向汇点的最大流量和。增广路径是啥?从源点到汇点的一条可行流路径。3.算法1.EKEKEK算法思想:每次bfsbfsbfs找到一条增广路,然后建立反边权(使其具有反悔的贪心原创 2020-12-21 22:55:55 · 260 阅读 · 0 评论 -
最小割的题目整理
最小割的题目整理前话:开个坑整理一下有关最小割的题型及思路,可能会咕咕咕。主要分享思路,以后会尽量少贴代码,分享最主要的代码。一.求最小割BZOJ1943.Vote 善意的投票第一个ACACAC的最小割问题。根据最大流最小割定理,我们只需求出最大流即可。方法就是建立S,TS,TS,T源点和汇点,分别表示不同意睡觉和同意睡觉的两个集合,若ai=1,edge(s,i)=0,edge(i,t)=1a_i=1,edge(s,i)=0,edge(i,t)=1ai=1,edge(s,i)=0,edge(i原创 2020-07-16 10:11:10 · 827 阅读 · 0 评论 -
最小费用最大流之ZKW算法。
最小费用最大流之ZKWZKWZKW算法。主要思想:是类比KMKMKM算法,虽然我不是很了解KMKMKM,通过不断修改可行标号,扩大可行子图,同时多路增广,避免了spfaspfaspfa维护较为复杂的标号的队列操作。实现的流程:1.找增广路与dinicdinicdinic一样。2.找不到增广路时,进行修改可行标号,通过对费用进行修改,使得产生可行增广路径。时间复杂度与spfaspfaspfa几乎相同,但是在某些图常数更小。适用范围:较为稠密的图,二分图,最终流量较大,费用取值范围较小,增广路径较短原创 2020-07-15 18:49:26 · 620 阅读 · 0 评论 -
牛客多校1.H.Minimum-cost Flow
牛客多校1.H.Minimum-cost Flow前话:因为多组没有初始化cntcntcnt边的数量,导致一直超时,懵逼了,对于多组数据重建图时,只需要初始化cntcntcnt和h[]h[]h[]数组(head[])(head[])(head[])即可。题意:给定(n,m)(n,m)(n,m)无向图,mmm条带权有向边(费用已知容量未知),给qqq次询问,每次询问给出u,v,(u≤v)u,v,(u\leq v)u,v,(u≤v),问在所有边容量为uv\dfrac{u}{v}vu下,总流量为111的最小原创 2020-07-14 21:54:26 · 330 阅读 · 0 评论 -
网络流习题整理
网络流习题整理1.最大流(无费用只需要让流量最大)因为之前写过两个例题就直接放链接了。Dinic实现的最大流时间复杂度:O(n2m)O(n^2m)O(n2m)EK实现的最大流 时间复杂度:O(nm2)O(nm^2)O(nm2)2.最小费用最大流.P3381 【模板】最小费用最大流模板题,用EKEKEK的bfsbfsbfs改为跑spfaspfaspfa,时间复杂度:O(nmf)O(nmf)O(nmf),fff为最大流量。具体看代码。#include<bits/stdc++.h>原创 2020-07-14 12:36:52 · 511 阅读 · 0 评论 -
P3376 【模板】网络最大流
P3376 【模板】网络最大流传送门dinicdinicdinic算法调了一天,有许多细节需要注意。思路:dinicdinicdinic算法,相比EKEKEK算法,时间复杂度从O(nm2)→O(n2m)O(nm^2)\rightarrow O(n^2m)O(nm2)→O(n2m)十分地优秀,因为EKEKEK算法是一次bfsbfsbfs找到一条增广路,再dfsdfsdfs求最大流十分麻烦。而dinicdinicdinic算法是一次bfsbfsbfs给图分层,然后dfsdfsdfs同时找多条增广路求原创 2020-07-01 10:07:36 · 468 阅读 · 0 评论 -
Drainage Ditches(最大流)
Drainage Ditches(最大流)传送门思路:最大流的裸题,此题数据较小,用Edmonds−KarpEdmonds-KarpEdmonds−Karp算法较方便。第一次写记录一下算法的实现:增广路径:从源点(类似起点)到汇点(类似终点) 的一条可行流的路径。1.寻找增广路径并记录增广路径,找到在该路径上的最大流。2.加上该贡献,然后对其路径建立反路径, (保证有反悔性质的贪心,得到最优解。)3.直到找不到增广路径推出循环,返回总贡献值。时间复杂度:O(nm2)O(nm^2)O(nm原创 2020-06-30 16:07:36 · 403 阅读 · 0 评论