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

最大流問題

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

圖-1

 

 

  如圖-1所示,在這個(gè)運(yùn)輸網(wǎng)絡(luò)中,源點(diǎn)S和匯點(diǎn)T分別是1,7,各邊的容量為C(u,v)。圖中紅色虛線所示就是一個(gè)可行流。標(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

  在介紹最大流問題之前,先介紹幾個(gè)概念:殘余網(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

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

 

最大流定理

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

 

Ford-Fulkerson方法

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

  算法流程如下:

  設(shè)隊(duì)列Q:存儲當(dāng)前未訪問的節(jié)點(diǎn),隊(duì)首節(jié)點(diǎn)出隊(duì)后,成為已檢查的標(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

            隊(duì)首頂點(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入隊(duì) 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){          //找不到增路徑時(shí)退出
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的反向邊錯(cuò)了吧?  回復(fù)  更多評論   

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

不錯(cuò),寫的很好,
順便問下我在有些書上看到在尋找可增廣路徑時(shí)需要同時(shí)尋找包含反向邊的可增路徑,但我也很迷惑我感覺這沒必要,我見你上面的描述也沒有搜索含反向邊的增廣路徑,盼指點(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

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

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

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

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

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

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

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

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

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

<2009年4月>
2930311234
567891011
12131415161718
19202122232425
262728293012
3456789

導(dǎo)航

統(tǒng)計(jì)

常用鏈接

留言簿(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>
            a4yy欧美一区二区三区| 在线看国产一区| 99xxxx成人网| 亚洲国产国产亚洲一二三| 久久综合九色综合久99| 99精品视频免费全部在线| 免费观看国产成人| 亚洲人成网站色ww在线| 亚洲黄色免费网站| 久久精品欧美日韩| 尤物99国产成人精品视频| 亚洲第一在线综合网站| 国产一区二区三区久久久| 久久亚洲精品中文字幕冲田杏梨| 欧美午夜a级限制福利片| 亚洲一区3d动漫同人无遮挡| 夜夜嗨av一区二区三区| 日韩视频中文字幕| 欧美福利视频一区| 亚洲一区二区少妇| 欧美午夜精品一区| 夜夜嗨av一区二区三区中文字幕| 亚洲美女精品一区| 亚洲欧美久久| 依依成人综合视频| 久久全球大尺度高清视频| 日韩亚洲一区在线播放| 欧美电影电视剧在线观看| 亚洲综合国产| 久久免费视频一区| 男女视频一区二区| 国产精品久久久久7777婷婷| 久久亚洲综合色一区二区三区| 国产欧美一区二区三区在线老狼 | 欧美激情一区二区三区在线视频观看 | 欧美成人四级电影| 欧美视频一区在线| 欧美大片一区| 亚洲精品资源| 国产精品久久久久久福利一牛影视| 亚洲视频成人| 亚洲国产欧美一区二区三区同亚洲| 亚洲理伦在线| 极品少妇一区二区三区精品视频 | 亚洲免费av片| 在线日韩av片| 欧美精品在线一区| 久久一区二区三区av| 亚洲福利视频免费观看| 亚洲一区国产视频| 99国产精品99久久久久久| 欧美调教视频| 久久精品99国产精品酒店日本| 亚洲视屏在线播放| 欧美激情第六页| 亚洲一区免费网站| 欧美韩日一区| 亚洲国产裸拍裸体视频在线观看乱了中文 | 午夜精品成人在线| 亚洲欧美激情一区二区| 欧美freesex8一10精品| 夜夜狂射影院欧美极品| 久久久久久亚洲精品杨幂换脸 | 久久亚洲精品中文字幕冲田杏梨 | 一区精品久久| 欧美亚一区二区| 久久综合中文色婷婷| 久久嫩草精品久久久久| 日韩一区二区精品葵司在线| 国产精品亚洲综合| 亚洲午夜精品福利| 亚洲你懂的在线视频| 一区二区三区在线观看欧美 | 久久午夜电影| 亚洲在线日韩| 亚洲裸体视频| 欧美mv日韩mv国产网站app| 午夜欧美精品久久久久久久| 欧美午夜精品| 欧美大片在线看| 欧美在线短视频| 模特精品在线| 久久精品国产99精品国产亚洲性色 | 一区二区三区国产在线| 欧美日韩视频在线| 亚洲一区二区三区精品动漫| 亚洲高清免费视频| 欧美 日韩 国产一区二区在线视频 | 久久成年人视频| 国产一区二区三区丝袜| 国产精品久久亚洲7777| 欧美一区三区二区在线观看| 久久视频国产精品免费视频在线 | 亚洲精品久久久久久一区二区| 欧美国产日韩一区| 久久久一二三| 日韩午夜av在线| 最近中文字幕mv在线一区二区三区四区 | 在线视频你懂得一区| 亚洲日韩成人| 久久国产精品久久w女人spa| 在线视频欧美精品| 日韩视频在线一区| 亚洲伦理在线观看| 日韩写真在线| 在线视频你懂得一区| 日韩午夜av电影| 99精品久久免费看蜜臀剧情介绍| 亚洲国产日韩欧美一区二区三区| 国内偷自视频区视频综合| 欧美xxxx在线观看| 免费看av成人| 欧美激情1区2区| 欧美激情综合在线| 欧美电影在线观看完整版| 欧美成人综合网站| 欧美精品一区二区高清在线观看| 欧美黑人在线观看| 欧美日韩精品二区| 久久婷婷国产综合国色天香| 久久久噜噜噜久噜久久| 六十路精品视频| 亚洲欧美不卡| 久久国产精品99国产| 久久人人97超碰国产公开结果 | 欧美成人精品激情在线观看| 欧美电影免费| 日韩亚洲欧美成人| 亚洲一区黄色| 久久久久久网| 欧美日韩精品免费观看| 国产精品素人视频| 伊人久久婷婷| 在线亚洲观看| 久久久久久久综合狠狠综合| 亚洲美女在线看| 亚洲欧美激情视频在线观看一区二区三区 | 欧美成人一区二区三区在线观看 | 99视频在线观看一区三区| 亚洲永久免费| 免费欧美电影| 久久亚洲国产精品一区二区| 亚洲丶国产丶欧美一区二区三区| 日韩视频在线免费观看| 午夜精品国产| 欧美精品色综合| 黄色国产精品一区二区三区| 国产精品自拍三区| 国产精品欧美日韩一区二区| 黄色在线一区| 亚洲尤物影院| 欧美激情视频网站| 性欧美长视频| 久久精品99| 国产精品成人一区二区网站软件 | 亚洲精品无人区| 久久精品久久综合| 亚洲破处大片| 久久久久久夜精品精品免费| 欧美日韩p片| 亚洲国产精品高清久久久| 亚洲综合色噜噜狠狠| 亚洲电影免费观看高清完整版在线观看 | 久久久久亚洲综合| 国产精品久久影院| 99精品久久免费看蜜臀剧情介绍| 久久九九免费视频| 亚洲午夜精品一区二区| 欧美久久视频| 亚洲人成艺术| 免费短视频成人日韩| 午夜一区二区三区在线观看| 欧美日韩激情网| 日韩午夜剧场| 欧美激情四色| 免费在线成人av| 亚洲国产一区二区三区在线播| 久久成人精品| 亚洲欧美日韩视频一区| 国产精品福利影院| 亚洲影院免费| 一区二区欧美日韩视频| 午夜综合激情| 国产人成一区二区三区影院| 亚洲欧美日韩综合一区| avtt综合网| 欧美日韩在线一区| 亚洲素人一区二区| 一区二区黄色| 国产精品扒开腿爽爽爽视频| 在线中文字幕不卡| 99re这里只有精品6| 欧美日韩一区在线播放| av成人免费在线| 一区二区三区导航| 国产精品一区一区| 久久久久久黄| 另类春色校园亚洲| av成人毛片| 亚洲天堂免费在线观看视频|