演算法導論 第二十六章最大流

2021-08-26 18:41:24 字數 1310 閱讀 8736

一,概念

1)流網路:簡單有向圖,且有兩個特別的頂點(源點s,匯點t)

2)流的邊標識為f(u,v)/c(u,v),流量/容量

3)流的三個性質:1>容量限制 對於所有邊 流量《容量

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

3>流守恆性 正向流與反響流之和為零

4)割:流網路g=(v,e)的割(s,t)將頂點v劃分為s和t=v-s兩部分,定義割的容量為c(s

)割這條線上s中頂點到t中頂點的容量之和

5)殘留網路:殘留容量 c f (u, v) = c(u, v) - f (u, v) //邊的容量減去邊的實際流量

6)增廣路徑:對於殘留網路 g f 中的一條 s-t 路徑 p 稱其為增廣路徑

二,最大流和最小割問題

1)最大流:對於乙個流網路 g  (v , e ) ,其流量 f 的最大值稱為最大流,最大流問題就

是求乙個流網路的最大流。

2)最小割:是指流網路中容量最小的割

三、最大流演算法的應用

1)最大流模型

例題:現在有 n 只奶牛,f 種食物和 d 種飲料,每只奶牛喜歡其中的一些食物和飲料。現在每種食物和飲料只能分給乙隻奶牛,每只奶牛也只能吃一種食物和一種飲料,問最多能使多少奶牛既吃到食物又喝到飲料。

解決:由於有 n 只奶牛、f 種食物和 d 種飲料,因此我們可以將這些東西抽象成圖中的點。為了方便,我們將食物放在左邊,奶牛放在中間,飲料放在右邊。由於食物和飲料的使用限制,我們從源點向每種食物連一條邊,從每種飲料向匯點連一條邊,容量都為 1。而每只奶牛都有喜歡的食物和飲料,因此將每只奶牛喜歡的食物連到這只奶牛,從這只奶牛連到每種它喜歡的飲料。但這樣是否就對了呢?實際還是有問題的,因為經過每只奶牛的食物可能超過一種,這就意味著每只奶牛可能會吃超過一組的食物和飲料,而這在題目中是不允許的。怎麼解決這個問題呢?我們又回到了流的基本性質:容量限制f (u, v) - c(u, v) 。因此我們將每只奶牛拆成兩個點,同一只奶牛的兩個點之間連邊,容量為 1。這樣們就能保證通過每只奶牛的流量為 1 了。每個流對應每種方案,最大流即為最佳方案。

暑假第二十六測

今天又考的奇差 題解 第一題 這麼簡單一道題我想了好久,智商實在是下線了 includeusing namespace std intmain view code 第二題 我們發現e的長度很小,我們可以在上面做文章,其實每個位置對應的 strlen e 都是一樣的 我們用樹狀陣列維護rt pos l...

第二十六講 深入委託

主要內容 1.我們忽略的事件與委託 有關於視窗載入的系統預定義的原 的理解 2.定義,使用委託 分兩步1.定義要使用的委託 2.建立例項 3.實踐 說媒,娶媳婦的標準 4.多播委託 1.可以讓乙個委託去呼叫一系列的方法 2.採用 增加到執行序列,使用 從序列移除 5.匿名方法 沒有方法簽名,只有方法...

第二十六天總結

求多源 無負權邊的最短路 floyd演算法 floyd warshall演算法是解決任意兩點間的最短路徑的一種演算法,可以正確處理有向圖或負權的最短路徑問題,同時也被用於計算有向圖的傳遞閉包。floyd warshall演算法的時間複雜度為o n3 空間複雜度為o n2 最小生成樹 給定乙個無向圖,...