網路流自學心得 day01

2021-09-25 19:23:14 字數 2151 閱讀 2876

匹配問題終於可以告一段落,雖然還不是很通透,但時間不允許了。

接下來我們來看看網路流的問題,這個東西和匹配還是有一點相似的,但是也好難。

第一天我們就來講講最大流 和 ek演算法。。(雖然這個演算法在競賽中基本不用)

我們的網路流從最大流開始。那什麼是最大流呢?

如上圖所示,假設我們現在要把一些物品從結點s(稱為源點)運送到結點t(稱為匯點),可以從其他結點中轉,問能夠到達t點的物品的最大值。

這樣的問題就被叫做最大流問題,對於一條邊(u,v)[u為起點,v為終點],他的物品上限稱為容量,記為c(u,v)(對於不存在的邊(u,v),c(u,v) = 0);實際運送的物品我們稱為流量,記為f(u,v)。在這裡的流量是乙個總稱,即把所有的流進流出都已經加在了一起。即將3個物品從u運送到了v,又把5個物品從v運送到了u,這就等價於我們把兩個物品從v運送到了u,所以將某乙個結果分成多個情況的相加是沒有意義的。這樣,我們就可以規定f(u,v)和f(v,u)最多只有乙個是整數,也可以都是0。並且f(u,v) = - f(v,u)。

我們的目標是把盡可能多的物品從s運送到t,而其他結點都只是中轉。因此對於除了s和t意外的任意節點u,他的流入始終是等於流出的。從s中運送出來的物品數量得那個魚到達t的物品數量,而這正是此處最大化的目標。即求出maxflow

而在這樣的問題中,容量c和流量f滿足了3個性質

1.容量限制 -----> f(u,v) <= c(u,v)

2.斜對稱性 -----> f(u,v) = - f(v,u)

3.流量平衡 -----> 指的就是對於除了結點s和t外的其餘結點,流入等於流出。

我們也可以說,當乙個圖滿足了這三個性質,我們把它當做乙個網路流的模型來對待。

我們從零流(所有邊的流量均為0)開始不斷增加流量,但在這個同時,我們讓每乙個點都滿足以上三個性質,直到增加到乙個最大的流,我們再也不能增加流除非打破這三個性質為止。

這就是增廣路演算法的基礎思想,在這個思想上加上bfs, 我們就得到了edmonds-karp演算法。

我們先來敘述幾個概念。

容量 :上面講過了。

流量: 即實際上你給這條邊流的量

殘量: 容量-流量。

增廣:求出該道路中所有殘量的最小值d,把對應的所有邊上的流量減去d。

當且僅當殘量網路中不存在增廣路,那麼此時的流就是最大流。

下面給出ek最簡單粗暴的**,而且這裡的存圖用的是二維陣列的形式。當然這種形式在很多時候就會爆棧,但只要理解了這個,用其他的存圖方式也不難解決。

這裡再給出乙個模板題,用二維陣列一定爆棧,但是用其他存圖方式就能過

最大流模板題

int n, m ,s ,t;

//n個點,m條邊,s是起點位置,t是終點位置

int a, b, c;

//a為u, b為v, c為c(u,v)

int w[len]

[len]

, flow[len]

[len]

;w為總圖,flow為流量圖

int pre[len]

, res[len]

, maxflow ;

//pre陣列記錄每乙個點的前驅,返回時用 res陣列表示餘量

int

main()

int ans =

edmonds_karp

(s,t)

; cout << ans << endl;

return0;

}

int

edmonds_karp

(int start,

int end)}}

if(!res[end]

)return maxflow;

//若果最後乙個點沒有餘量了,那就說明已經沒有留下的了。

for(

int i=end; i!=start; i=pre[i]

) maxflow +

= res[end];}

}

這裡才給出乙個厲害的博主寫的厲害的部落格

ek演算法詳解

Shell自學筆記day 01

定義 shell是乙個命令列形式展現給使用者的應用型程式,連線使用者跟linux核心,給使用者提供更加高效 安全 低成本的方式去操作核心。只知道使用者能通過shell去操作核心還不夠,還得知道shell是如何去操作核心的。用兩字概括就是函式,沒錯,就是函式!而且除了呼叫核心暴露出來的函式介面,沒有其...

網路攻防基礎 Day01

計算機網路一些相互連線的 以共享資源為目的的 自治的計算機的集和。計算機網路系統 服務端 使用者端 存在於網路通訊的雙方,包含了硬體 軟體 作業系統等元素 線纜 交換機 路由器 網路協議等。可以概括為計算機硬體 計算機軟體 計算機作業系統 交換機 路由器等連線裝置 網路協議。網際網路 表層網 深網兩...

學習筆記day01

作業系統簡稱 operating system 簡稱os 其的本質就是乙個軟體,作業系統對上可以管理應用程式,對下可以訪問硬體裝置。主流的作業系統 pc機領域 windows系列,ios,伺服器領域 linux系列,unix,windows server。手持裝置 ios,android,塞班,wi...