给定一个有向图(若是无向图,那么可以用两条有向边表示一条无向边),边有一个权值表示这条边上的流量,
形象一点:我们有n个城市,告诉你某些路以及路上最多分分钟的车流量。
然后我们求从 1 点压入无限多的车,问从n点分分钟能跑出多少车量的问题称为 网络流(最大流)。
我们称无限多进入车辆的点为:源点
车辆的出口的点为:汇点
数据结构:用以下这样的结构体来表示边
struct Edge{
int from, to, cap, flow, nex; //一条边有起点,终点,最大车流量,当前车流量,下一个节点的指针
}edge[M];
对于每条边,当我们给这条边流过的车流量 = 最大车流量时,称这条边为:满流
对于每条边,cap - flow 就是残余流量(就是还能有多少量车可以从这条路上通过)
加边的函数:
int head[N], edgenum;//邻接表的形式,head为表头,每个点都有一个表头
void addedge(int from, int to, int cap){
Edge E = {from, to, cap, 0, head[from]};
edge[edgenum] = E;
head[from] = edgenum++;
Edge E2= {from, to, 0, cap, head[to]};
edge[edgenum] = E2;
head