这是初学网络流的时候从<算法竞赛进阶指南>抄下来的一份代码,自己理解的也不是很透彻. 注意,边要从 \(1\) 开始计,不然直接 \(xor\) 运算的话取反边会直接炸掉. #include <bits/stdc++.h> #define int long long namespace Basic { template <typename Temp> inline void read(Temp & res) { Temp fh = 1; res = 0; cha…
#include<bits/stdc++.h>using namespace std;typedef long long ll;const ll inf=0x3f3f3f3f;int cnt=1;//边的数量int head[110],cur[110];//head记录每一个点最后一条边的编号,cur记录当前点循环到了哪一条边int n,deep[110],s,t,start;//s设为不选,t为选,即源点和汇点//权值为负的点向s连容量为-w的边,权值为正的点向t连容量为w的边//这里的容量…
题意:有K个挤奶机编号1~K,有C只奶牛编号(K+1)~(C+K),每个挤奶机之多能挤M头牛,现在让奶牛走到挤奶机处,求奶牛所走的最长的一条边至少是多少. 题解:从起点向挤奶机连边,容量为M,从挤奶机向奶牛连,边容量为1,从奶牛向汇点连边,容量为1.二分最长边的长度,每次重新构图,边权小于等于mid的可以走,其余为INF,每次检查汇点的流量是否为C即可. 代码如下: #include <iostream> #include <algorithm> #include <cstd…
(点击此处查看原题) Dinic算法 Dinic算法相对于EK算法,主要区别在于Dinic算法对图实现了分层,使得我们可以用一次bfs,一次dfs使得多条增广路得到增广 普通的Dinic算法已经可以处理绝大多数最大流(最小割)的题目了,但是总是有些题目会卡住普通的Dinic算法,此时我们就需要用到当前弧优化了 当前弧优化简述 不要小看当前弧优化,这个优化效果可是很明显的,就这个例题来说,我用普通的Dinic算法用时约1.7s,而使用了当前弧优化的Dinic算法后,只用了176ms,由此可以看出这…
在阅读本文前,建议先自学最大流的Ek算法. 引入 Ek的核心是执行bfs,一旦找到增广路就停下来进行增广.换言之,执行一遍BFS执行一遍DFS,这使得效率大大降低.于是我们可以考虑优化. 核心思路 在一次BFS中,找到的增广路可能不止一条,这时我们可以本着“尽量少进行BFS”的想法,在一次bfs后把所有能增广的路径全部增广.具体怎么做呢?仍然是:while(bfs(源点,汇点)) dfs(): 每次bfs标记出每个点的“深度”,也就是距离源点的长度.我们将得到的新图称作分层图.接下来我们在分层图…
Island Transport Description In the vast waters far far away, there are many islands. People are living on the islands, and all the transport among the islands relies on the ships. You have a transportation company there. Some routes are opened for p…
题目链接 妈耶 我的图建反了两次 准确的说是有两个地方建反了,然后反上加反改了一个小时…… 知道为什么要拆点吗? 假设这是你的图   左边到右边依次是超级源点    练习册     书     答案     超级汇点 请问这张图的最大流是多少? 如果把中间拆成这样: Book-in是跟练习册匹配的书的入端,Book-out是跟答案匹配的书的出端.相当于每本书都是一条隧道,有入口有出口,每本书的入口和对应的出口连边. 请问现在这张图的最大流是多少? 所以你看. 代码放上: #include<ios…
欢 迎 来 到 网 络 瘤 的 世 界 什么是网络流? 现在我们有一座水库,周围有n个村庄,每个村庄都需要水,所以会修水管(每个水管都有一定的容量,流过的水量不能超过容量).最终水一定会流向唯一一个废水处理厂(至于为什么只有一个就不是我们能知道的了). 最大流 神马是最大流? 要我们求能流向废水处理厂的最多的水量. 由于每个村庄的人都不想要水量过多导致爆掉水管结果水漫金村(雾),所以在水库到废水处理厂的一条路径流过的水量最多是这条路径上最小的水管容量.同时因为有不只一根水管和水库连接,所以水可以…
qyy开始练习网络流啦 , 啊 ,蒟蒻只会套版 ,很裸的题 , 我连题都不想发了 ,可以参考我的代码(虽然我也是看的别人的 #include <iostream> #include <cstring> #include <vector> #include <cstdio> #include <queue> + , M = + ; using namespace std ; int n , m ; int tot , head[N] ; long…
poj1273 Drainage Ditches Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 54962   Accepted: 20960 Description Every time it rains on Farmer John's fields, a pond forms over Bessie's favorite clover patch. This means that the clover is cov…