网络流专项
文章平均质量分 62
省选必备知识,属于图论知识,但是内容与算法较多,稍微有一点点理解难度,所以专门拎出来
WQhuanm
获奖项:2023天梯赛三等奖
展开
-
最大权闭合子图(最小割模型)
1,最大权闭合子图是最小割的一个模型。即每一个子图中的每一个点,其出边的点也全应该在这个子图中。而所有子图中,其点的权值和最大就是最大权闭合子图。2,构建该图,我们把所有正权值点与源点s连接(其边权为点权),所有负权值点有汇点t连接(其边权为负点权(即改为正数)),而点与点之间的边都是INF的边。这样,我们的最小割一定割的是连接s或者t的边(最小割不会割INF边的)。3,我们说过,点的出边一定要与点在同一个子图中,所以建立点与点之间的关系(如a->b,a->c),其关系为走a必须同时走b和c。原创 2023-02-17 15:29:26 · 514 阅读 · 0 评论 -
最小费用最大流
就是边权还多了个单位费用,要你求所有最大流中花费费用最小的一个,其实说白了就是最大流+最短路。对于ek的更改并不大,直接模板介绍。考虑到有负权边,我们一般是。原创 2022-12-02 20:59:08 · 166 阅读 · 0 评论 -
网络流——最小割
注意:因为我们第一遍跑图,反向边(实际不存在的边)的值有的已经被更改,所以需要重新初始化为0(不是1或者INF,这是对实际存在的边的操作,反向边只是用于反悔的辅助)P1344 [USACO4.4]追查坏牛奶Pollutant Control思路:我们就直接按上面的思路手操一波(假设你已经学会了ispa(增广路方法中最快的算法)),通过代码你应该就会直接领悟int n, m;int num;ll ans;int now[N];int dep[N];{{}原创 2022-12-02 09:32:51 · 2345 阅读 · 0 评论 -
最大流三大算法——3,ISAP算法
ISAP大概就是bfs逆向建图,然后遍历每个点并标记其深度(这是核心思想,待会细说),之后从起点遍历到终点(每次深入必须满足点之间的深度差为1),如果一条增广路走完,且路上的某个点被增广过(后面无法再走了),那么这个点及其前面的点深度加一。我们已经明白了dinic的优越性了(只要不是毒瘤题就不会去卡他的),但是每次dfs跑完都要bfs重新建图,还是有点太繁琐了,我们能不能一劳永逸呢。这样不断dfs,直到出现断层或者起点的深度大于n,跳出。gap的作用大概是这样。原创 2022-12-01 08:52:08 · 724 阅读 · 0 评论 -
最大流三大算法——2,dinic算法
如果我们前面dfs把1->3后面的路径走了4,5两条(并让他不能再增广了),那我2号点往下走,难道还要去不能增广的路径吗,不应该直接去6号吗,所以我们可以开个now数组,标记now[x]指向后面哪个点了,如果更新到6,就指向6(不再是前面的4,5),这样就实现了。我们bfs找增广路时对点之间建层(设起点层数1,0表示还未访问,没有建层),建层后我们可以用dfs去遍历每一层,这样就实现。我们说过:EK算法每次都可能会遍历整个残量网络,但只找出一条增广路,这样是不是太浪费了,我们能否做到一次找多条增广路呢。原创 2022-11-29 21:50:54 · 238 阅读 · 0 评论 -
最大流三大算法——1,EK(Edmonds−Karp)算法
设起点s,终点t一条能够从s到t的路(当然,每个点还有剩余容量可以运水)被称为增广路:看到剩余,你应该会联想到,如果这条路有一个点容量用完了,那这条路就断了。所以我们可以用bfs一直遍历:只要找到这样一条路径,我们就把路径上容量最小的点取出来,然后路径上所有点减去这个最小值,我们一直找路径并减去路径点容量,直到不再有增广路,就求解出最大流了相信你会发现亿点小瑕疵,如果我有一条路径不是最优解,那不就寄了,对的,所以人是容易后悔的(机器也想要嘛)反向边。原创 2022-11-28 20:11:27 · 431 阅读 · 0 评论