青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

最大流問題

最近又復(fù)習(xí)了下最大流問題,每次看這部分的內(nèi)容都會有新的收獲。可以說最大流問題的資料網(wǎng)上一搜一大把,根本沒有必要自己寫;但是大部分資料上的專業(yè)術(shù)語太多了,初學(xué)很難理解,至少我當(dāng)年學(xué)這部分的時候前幾次就沒有看懂。所以我準(zhǔn)備備份一點(diǎn)個人的理解。

圖-1

 

 

  如圖-1所示,在這個運(yùn)輸網(wǎng)絡(luò)中,源點(diǎn)S和匯點(diǎn)T分別是1,7,各邊的容量為C(u,v)。圖中紅色虛線所示就是一個可行流。標(biāo)準(zhǔn)圖示法如圖-2所示:


 

 

其中p(u,v) / c(u,v)分別表示該邊的實(shí)際流量與最大容量。

 

關(guān)于最大流

  熟悉了什么是網(wǎng)絡(luò)流,最大流也就很好理解了。就是對于任意的uV-{s},使得p(s,u)的和達(dá)到最大。上面的運(yùn)輸網(wǎng)絡(luò)中,最大流如圖-3所示:MaxFlow=p(1,2)+p(1,3)=2+1=3

  在介紹最大流問題之前,先介紹幾個概念:殘余網(wǎng)絡(luò),增廣路徑,反向弧,最大流定理以及求最大流的Ford-Fulkerson方法。

殘余網(wǎng)絡(luò) 增廣路徑 反向弧

  觀察下圖-4,這種狀態(tài)下它的殘余網(wǎng)絡(luò)如圖-5所示:



   

 

  也許現(xiàn)在你已經(jīng)知道什么是殘余網(wǎng)絡(luò)了,對于已經(jīng)找到一條從S T的路徑的網(wǎng)絡(luò)中,只要在這條路徑上,把C(u,v)的值更新為C(u,v)-P(u,v),并且添加反向弧C(v,u)。對應(yīng)的增廣路徑Path為殘留網(wǎng)絡(luò)上從ST的一條簡單路徑。圖-41247就是一條增廣路徑,當(dāng)然還有1347

  此外在未做任何操作之前,原始的有向圖也是一個殘余網(wǎng)絡(luò),它僅僅是未做任何更新而已

 

最大流定理

  如果殘留網(wǎng)絡(luò)上找不到增廣路徑,則當(dāng)前流為最大流;反之,如果當(dāng)前流不為最大流,則一定有增廣路徑。

 

Ford-Fulkerson方法

  介紹完上面的概念之后,便可以用Ford-Fulkerson方法求最大流了。為什么叫Ford-Fulkerson方法而不是算法,原因在于可以用多種方式實(shí)現(xiàn)這一方法,方式并不唯一。下面介紹一種基于廣度優(yōu)先搜索(BFS)來計算增廣路徑P的算法:Edmonds-Karp算法。

  算法流程如下:

  設(shè)隊列Q:存儲當(dāng)前未訪問的節(jié)點(diǎn),隊首節(jié)點(diǎn)出隊后,成為已檢查的標(biāo)點(diǎn);

  Path數(shù)組:存儲當(dāng)前已訪問過的節(jié)點(diǎn)的增廣路徑;

  Flow數(shù)組:存儲一次BFS遍歷之后流的可改進(jìn)量;

  Repeat:

    Path清空;

    源點(diǎn)S進(jìn)入PathQPath[S]<-0Flow[S]<-+∞;

    While Q非空 and 匯點(diǎn)T未訪問 do

        Begin

            隊首頂點(diǎn)u出對;

            For每一條從u出發(fā)的弧(u,v) do

                If v未訪問 and (u,v) 的流量可改進(jìn);

                Then Flow[v]<-min(Flow[u],c[u][v]) and v入隊 and Path[v]<-u

    End while

   

    If(匯點(diǎn)T已訪問)

    Then 從匯點(diǎn)T沿著Path構(gòu)造殘余網(wǎng)絡(luò);

  Until 匯點(diǎn)T未被訪問

 

應(yīng)用實(shí)例

  這是一道最大流的入門題,題目如下:

  http://acm.pku.edu.cn/JudgeOnline/problem?id=1273

Description

  Every time it rains on Farmer John's fields, a pond forms over Bessie's favorite clover patch. This means that the clover is covered by water for awhile and takes quite a long time to regrow. Thus, Farmer John has built a set of drainage ditches so that Bessie's clover patch is never covered in water. Instead, the water is drained to a nearby stream. Being an ace engineer, Farmer John has also installed regulators at the beginning of each ditch, so he can control at what rate water flows into that ditch.
Farmer John knows not only how many gallons of water each ditch can transport per minute but also the exact layout of the ditches, which feed out of the pond and into each other and stream in a potentially complex network.
Given all this information, determine the maximum rate at which water can be transported out of the pond and into the stream. For any given ditch, water flows in only one direction, but there might be a way that water can flow in a circle.

Input

  The input includes several cases. For each case, the first line contains two space-separated integers, N (0 <= N <= 200) and M (2 <= M <= 200). N is the number of ditches that Farmer John has dug. M is the number of intersections points for those ditches. Intersection 1 is the pond. Intersection point M is the stream. Each of the following N lines contains three integers, Si, Ei, and Ci. Si and Ei (1 <= Si, Ei <= M) designate the intersections between which this ditch flows. Water will flow through this ditch from Si to Ei. Ci (0 <= Ci <= 10,000,000) is the maximum rate at which water will flow through the ditch.

Output

  For each case, output a single integer, the maximum rate at which water may emptied from the pond.

Sample Input

5 4

1 2 40

1 4 20

2 4 20

2 3 30

3 4 10

Sample Output

50

 1 #include <iostream>
 2 #include <queue>
 3 using namespace std;
 4 
 5 const int N = 210;
 6 const int INF = 0x7FFFFFFF;
 7 int n,m,map[N][N],path[N],flow[N],start,end;
 8 queue<int> q;
 9 
10 int bfs(){
11     int i,t;
12     while(!q.empty()) q.pop();
13     memset(path,-1,sizeof(path));
14     path[start]=0,flow[start]=INF;
15     q.push(start);
16     while(!q.empty()){
17         t=q.front();
18         q.pop();
19         if(t==end) break;
20         for(i=1;i<=m;i++){
21             if(i!=start && path[i]==-1 && map[t][i]){
22                 flow[i]=flow[t]<map[t][i]?flow[t]:map[t][i];
23                 q.push(i);
24                 path[i]=t;
25             }
26         }
27     }
28     if(path[end]==-1return -1;
29     return flow[m];                   //一次遍歷之后的流量增量
30 }
31 int Edmonds_Karp(){
32     int max_flow=0,step,now,pre;
33     while((step=bfs())!=-1){          //找不到增路徑時退出
34         max_flow+=step;
35         now=end;
36         while(now!=start){
37             pre=path[now];
38             map[pre][now]-=step;      //更新正向邊的實(shí)際容量
39             map[now][pre]+=step;      //添加反向邊
40             now=pre;
41         }
42     }
43     return max_flow;
44 }
45 int main(){
46     int i,u,v,cost;
47     while(scanf("%d %d",&n,&m)!=EOF){
48         memset(map,0,sizeof(map));
49         for(i=0;i<n;i++){
50             scanf("%d %d %d",&u,&v,&cost);
51             map[u][v]+=cost;           //not just only one input
52         }
53         start=1,end=m;
54         printf("%d\n",Edmonds_Karp());
55     }
56     return 0;
57 }
58 

posted on 2009-04-19 20:58 極限定律 閱讀(13551) 評論(15)  編輯 收藏 引用 所屬分類: ACM/ICPC

評論

# re: 最大流問題[未登錄] 2009-05-29 10:46 Wing

嗯, 您的一些文章很有獨(dú)特的見解, 以后定期過來學(xué)習(xí)~ O(∩_∩)O哈哈~
希望您再接再厲, 順便預(yù)祝 有道難題, 百度之星 獲得好成績  回復(fù)  更多評論   

# re: 最大流問題 2009-08-03 09:57 Leng

很好很詳細(xì)  回復(fù)  更多評論   

# re: 最大流問題 2009-08-13 10:11 va

好東西啊 經(jīng)常搜到大牛的博客  回復(fù)  更多評論   

# re: 最大流問題 2010-04-04 23:46 lyt9469

太好了,深入淺出  回復(fù)  更多評論   

# re: 最大流問題 2010-06-10 17:19 ss

4~7的反向邊錯了吧?  回復(fù)  更多評論   

# re: 最大流問題 2010-11-13 10:37 Crazy_Js

不錯,寫的很好,
順便問下我在有些書上看到在尋找可增廣路徑時需要同時尋找包含反向邊的可增路徑,但我也很迷惑我感覺這沒必要,我見你上面的描述也沒有搜索含反向邊的增廣路徑,盼指點(diǎn)迷津,謝謝  回復(fù)  更多評論   

# re: 最大流問題 2010-11-29 15:47 gdut

比黑書里面講的好,黑書里面我看不懂  回復(fù)  更多評論   

# re: 最大流問題 2010-12-10 10:29 中國人

請問一下, 添加反向邊 有什么道理? 雖然我知道程序是正確的,但不知道為什么要添加反向邊.請指教
  回復(fù)  更多評論   

# re: 最大流問題 2010-12-13 18:41 ACM初學(xué)者

收藏了,謝謝了,寫的很好  回復(fù)  更多評論   

# re: 最大流問題 2010-12-16 18:10 RnMss

這圖……是……NOI2006WC的……***~~~@@@  回復(fù)  更多評論   

# re: 最大流問題 2011-12-19 00:44 22

錯的圖  回復(fù)  更多評論   

# re: 最大流問題 2011-12-30 20:24 bcydsjbr

1,1吧@ss
  回復(fù)  更多評論   

# re: 最大流問題[未登錄] 2012-03-03 12:29 bob

反向邊是為了給算法一個改正以前錯誤的途徑,自己畫畫就知道了  回復(fù)  更多評論   

# re: 最大流問題 2012-06-24 22:42 ex

講解很清晰  回復(fù)  更多評論   

# re: 最大流問題 2013-10-21 16:47 LittleFIsh

文章很牛逼,不過有一個小小的錯誤,在圖4和圖5中,有一個地方相沖突,就是圖4中的4和7節(jié)點(diǎn)之間的流量,與圖5中c和t節(jié)點(diǎn)的流量不一致。  回復(fù)  更多評論   

<2009年8月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
303112345

導(dǎo)航

統(tǒng)計

常用鏈接

留言簿(10)

隨筆分類

隨筆檔案

友情鏈接

搜索

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            99国产精品自拍| 欧美成人黄色小视频| 亚洲精品日日夜夜| 欧美激情亚洲国产| 亚洲美女av电影| 亚洲人成人一区二区三区| 欧美国产欧美亚洲国产日韩mv天天看完整 | 这里只有精品电影| 国产精品热久久久久夜色精品三区| 午夜久久久久| 性做久久久久久免费观看欧美| 国产日韩欧美精品| 欧美高清视频www夜色资源网| 欧美成人午夜视频| 亚洲欧美经典视频| 久久成人这里只有精品| 亚洲日本一区二区三区| 亚洲视频一区| 亚洲大片在线| 亚洲视频精品| 亚洲国产精品va在线看黑人动漫 | 亚洲视频欧美视频| 午夜久久久久久| 亚洲日本aⅴ片在线观看香蕉| 一区二区三区四区国产| 国产自产精品| 99ri日韩精品视频| 伊人成人网在线看| 亚洲特级毛片| 91久久久精品| 欧美在线三区| 亚洲一区自拍| 欧美fxxxxxx另类| 欧美一区永久视频免费观看| 欧美韩国一区| 久久亚洲综合色| 国产精品久久久久9999高清| 亚洲第一色在线| 国产婷婷色一区二区三区| 亚洲精品视频在线| 亚洲春色另类小说| 先锋影音久久久| 亚洲一品av免费观看| 美日韩免费视频| 久久成人免费日本黄色| 欧美日韩在线播放三区| 欧美激情亚洲自拍| 一区二区三区自拍| 欧美在线www| 欧美一级久久| 国产精品免费观看视频| 日韩图片一区| 一区二区三区欧美| 欧美大成色www永久网站婷| 久久综合精品国产一区二区三区| 国产精品久久久久久久第一福利| 亚洲激情在线视频| 亚洲人成人77777线观看| 久久精品在线免费观看| 久久久久一区二区| 国产主播一区二区| 欧美在线亚洲在线| 久久久久久久久久久久久女国产乱| 国产精品久久久久久亚洲调教| 亚洲另类一区二区| 亚洲线精品一区二区三区八戒| 欧美激情按摩| 91久久亚洲| 亚洲午夜一级| 国产精品人人做人人爽| 亚洲专区在线| 久久久久久九九九九| 国产亚洲亚洲| 久热这里只精品99re8久| 免费一级欧美片在线播放| 在线日韩电影| 欧美精品乱码久久久久久按摩| 亚洲国产成人精品久久| 99国产精品99久久久久久粉嫩| 欧美日韩国产一区精品一区| 99人久久精品视频最新地址| 亚洲欧美在线免费观看| 国产欧美一区二区色老头| 久久精品亚洲精品| 亚洲国产精品黑人久久久| 99天天综合性| 国产精品视频一区二区高潮| 欧美中文日韩| 亚洲激情欧美| 午夜在线精品偷拍| 亚洲国产99精品国自产| 欧美日韩在线观看视频| 欧美一区二区在线| 欧美激情视频在线播放| 亚洲一区二区综合| 国产亚洲成年网址在线观看| 美女精品在线观看| 亚洲图色在线| 欧美成人午夜| 性色av一区二区三区在线观看 | 欧美日本在线播放| 亚洲自拍另类| 亚洲第一区在线| 香蕉久久精品日日躁夜夜躁| 亚洲第一成人在线| 国产精品视频1区| 免费成人av在线| 午夜视频一区二区| 亚洲欧洲精品一区二区| 久久国产精品久久精品国产| 亚洲精选91| 精品999久久久| 国产精品高精视频免费| 久久久久久久综合狠狠综合| 在线亚洲+欧美+日本专区| 免费观看日韩av| 欧美一乱一性一交一视频| 亚洲精品一区二区三区婷婷月| 国产女人18毛片水18精品| 免费视频一区二区三区在线观看| 亚洲一区日韩在线| 亚洲人成网在线播放| 免费看精品久久片| 欧美一区2区视频在线观看| av成人手机在线| 91久久精品日日躁夜夜躁欧美 | 亚洲福利av| 国产一区二区三区四区三区四| 欧美日韩在线亚洲一区蜜芽| 久久精品国产精品亚洲| 亚洲一区二区视频在线| 一区二区精品国产| 亚洲人成网站在线观看播放| 欧美激情在线播放| 免费观看一级特黄欧美大片| 久久精品亚洲乱码伦伦中文| 午夜精品免费视频| 亚洲一区免费视频| 亚洲视频一区二区| 中国成人亚色综合网站| 一本到12不卡视频在线dvd| 亚洲精品视频二区| 日韩一级免费| 一区二区三区视频在线看| 亚洲精品影院在线观看| 最新日韩在线视频| 亚洲精品韩国| 99精品欧美一区二区蜜桃免费| 亚洲免费观看高清在线观看| 亚洲精品老司机| 日韩一级不卡| 亚洲一区二区三区国产| 亚洲欧美日韩国产综合精品二区 | 日韩一级二级三级| 亚洲美女免费精品视频在线观看| 最近中文字幕日韩精品| 亚洲美女福利视频网站| 一区二区三区久久网| 亚洲一区二区三区在线观看视频 | 亚洲午夜一二三区视频| 亚洲专区欧美专区| 欧美在线免费一级片| 麻豆成人在线| 亚洲黄色成人网| 亚洲视频精选在线| 欧美在线观看你懂的| 蜜乳av另类精品一区二区| 美女免费视频一区| 国产精品videossex久久发布| 国产欧美日韩三区| 亚洲黄色免费电影| 亚洲在线中文字幕| 美女日韩欧美| 99一区二区| 久久精品日韩| 欧美日本中文字幕| 国产亚洲毛片在线| 一区二区三欧美| 久久高清国产| 亚洲精品一二| 久久激五月天综合精品| 欧美日韩aaaaa| 国产有码一区二区| 99国产麻豆精品| 久久免费视频网| 一本大道久久a久久精品综合| 欧美在线观看视频| 欧美日韩一区综合| 在线欧美一区| 久久成人资源| 亚洲人成在线播放网站岛国| 久久av一区二区三区漫画| 欧美日韩精品国产| 在线精品观看| 久久aⅴ国产紧身牛仔裤| 亚洲人屁股眼子交8| 久久久久久久网| 国产美女扒开尿口久久久| 日韩亚洲欧美中文三级| 欧美成人精品|