[1]: 最大流入門[2]: 演算法講堂
[3]:dinic優化
通俗理解最大流就是在某個時間點從源點s到終點t流過的水的最大值如圖,最大流為9
①線路 s->3->t:可以流過$min(5,3)=3$,然後$s->3$還有$5-3=2$的剩餘
②線路 s->1->2->t:可以流過$min(5,6,10)=5$,然後$1->2$還有$6-5=1$的剩餘,$2->t$還有$10-5=5$的剩餘
③線路s->3->1->2->t: 可以流過$min(2,3,1,5)=1$
最大流$=①+②+③=9$
將圖分層,每一層都是按照不同方式的幾條從原點到匯點的路徑利用bfs尋找所有的分層方法,分完層利用dfs去試探,找到所有分層方式中水流最大的一種
對於一次 bfs() 後尋找增廣路來說,如果詢問了一條路的編號為 a 時,那麼不再會通過這條路增廣。比如已經對$1->2->3$進行了增廣,那在到$2$時,$2->3$已經不會增加流量了,所有可以直接略過 (一般用處不大...)
dfs時一次找到該點u所有的增廣路,用乙個$flow$記錄流向u的流量,用$nowflow$記錄流出u的流量
$nowflow$的計算就需要通過u流向的點來計算。$nowflow$肯定是下於等於$flow$的,當$nowflow==flow$時可以直接$break$
在增廣時對正向邊和反向邊操作有個小技巧,因為在加邊時正向邊和反向邊是一起加入的一前一後,所以兩條邊是相鄰的
正向邊序號^1=反向邊序號,反向邊序號^1=正向邊序號。前提是第一條邊序號是偶數,所以向前星的下標從0開始的
如果當前 u 點伸展完後發現過這個點沒有任何增廣路被發現,即當前點$nowflow==0$ ,
則說明增廣路不可能通過該點伸展,使得d[u] = -2,不再伸展這個點
最大流dinic
網路流建模彙總
模板 網路最大流 最大流
給出乙個網路圖,以及其源點和匯點,求出其網路最大流。in put role presentation inp utin put4 5 4 3 4 2 30 4 3 20 2 3 20 2 1 30 1 3 40ou tput role presentation out puto utpu t50最大...
模板 網路最大流 最大流
給出乙個網路圖,以及其源點和匯點,求出其網路最大流。in put role presentation inp utin put4 5 4 3 4 2 30 4 3 20 2 3 20 2 1 30 1 3 40ou tput role presentation out puto utpu t50最大...
網路最大流
1,一般增廣路演算法 採取標號法每次在容量網路中尋找一條增廣路進行增廣,直至不存在增廣路為止。增廣路方法 2,最短增廣路演算法 每個階段 在層次網路中,不斷用bfs演算法進行增廣直到 不存在增廣路為止。如果匯點不在層次網路中,則演算法中 止。3,連續最短增廣路演算法 在最短增廣路演算法的基礎上改造 ...