1)點帶需求的流通:
新的架構特點:有多個供給點(d(v)<0),都稱作源點;有多個需求點(d(v)>0),都稱作匯點。同時仍然滿足傳統最大流中的容量條件(0 <= f(e) <= cap(e))和需求條件(f_in(v) - f_out(v) = d(v))。
需要解決的問題:由於有多個源點和匯點,所以不再考慮最大化問題,而是考慮有沒有滿足容量條件和需求條件的一個可行流通(可行性)。
判斷可行性的方法是,把帶需求{ d(v) }的可行流通問題轉換為在另一個網路中找最大 s-t 流的問題。另一個網路的構造方法如下:
給個例子就是這樣的:
在G‘中找最大 s-t 流,那麼最大流的值是多少才能證明原圖G中存在可行流通。。。答案是P272,定理7.50:
G中存在一個帶{ d(v) }的可行流通,若且唯若G’的最大 s*-t* 流有值D(其中,D是所有需求的和,同時也是所有供給的和)。
2)點帶需求 和 邊帶下界的流通:
新的架構特點:有多個供給點(d(v)<0),都稱作源點;有多個需求點(d(v)>0),都稱作匯點;同時,每些邊e有最小流量 low(e) 的要求(即,必須使用某些邊,且仍然滿足傳統最大流中的容量條件(low(e) <= f(e) <= cap(e))和需求條件(f_in(v) - f_out(v) = d(v))。
需要解決的問題:由於有多個源點和匯點,所以不再考慮最大化問題,而是考慮有沒有滿足容量條件和需求條件的一個可行流通(可行性)。
判斷可行性的方法是,把點帶需求{ d(v) }和邊帶下界{ low(e) }的可行流通問題轉換為在另一個只有點帶需求{ d(v) }的網路中判斷可行流通的問題,進而轉換為在第三個網路中找最大 s-t 流的問題。另一個網路的構造方法如下:
對於所有有容量下界 low(e) 的邊,將容量變得 0 <= f(e) <= cap(e) - low(e),相當於提前提供了 low(e) 這麼多流量的保障;那麼,e的尾部節點v應該還能提供的流量要相應減少low(e);同時,e的頭部節點v應該在原有流量需要的基礎上,再加上強加給它的low(e)的需求。可能沒描述清楚,看圖:
去下界的轉換相當於 v 到 w 有 low(e)個流量已經流過去,那要不要加容量為low(e)的反向邊。
答案: 不用。反向邊相當於給了後悔的機會,加了反向邊,之後就可以把已經流過去的low(e)個流量又推回來,這不是我們想要看到的。