建图方法:
令每条边的容量下界为0,此刻容量上界变成了$up-down$(上界减去下届),我们定义一个$du[]$数组保存每个节点的入流之和与出流之和的差,建一个超级源点和一个超级汇点,当$du[i]>0$,说明入流大于出流,为了满足流量守恒,连一条$st$到$i$容量为$du[i]$的边,当$du[i]<0$,说明出流大于入流,连一条$i$到$sd$容量为$-du[i]$的边。
最构造的网络进行一次最大流,当且仅当所有附加弧满载时原网络有可行流,否则没有。
题解
建图方法:
令每条边的容量下界为0,此刻容量上界变成了$up-down$(上界减去下届),我们定义一个$du[]$数组保存每个节点的入流之和与出流之和的差,建一个超级源点和一个超级汇点,当$du[i]>0$,说明入流大于出流,为了满足流量守恒,连一条$st$到$i$容量为$du[i]$的边,当$du[i]<0$,说明出流大于入流,连一条$i$到$sd$容量为$-du[i]$的边。
最构造的网络进行一次最大流,当且仅当所有附加弧满载时原网络有可行流,否则没有
代码
1 | // Dinic(最大流算法) |