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

最大流問題

最近又復習了下最大流問題,每次看這部分的內容都會有新的收獲。可以說最大流問題的資料網上一搜一大把,根本沒有必要自己寫;但是大部分資料上的專業術語太多了,初學很難理解,至少我當年學這部分的時候前幾次就沒有看懂。所以我準備備份一點個人的理解。

圖-1

 

 

  如圖-1所示,在這個運輸網絡中,源點S和匯點T分別是1,7,各邊的容量為C(u,v)。圖中紅色虛線所示就是一個可行流。標準圖示法如圖-2所示:


 

 

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

 

關于最大流

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

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

殘余網絡 增廣路徑 反向弧

  觀察下圖-4,這種狀態下它的殘余網絡如圖-5所示:



   

 

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

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

 

最大流定理

  如果殘留網絡上找不到增廣路徑,則當前流為最大流;反之,如果當前流不為最大流,則一定有增廣路徑。

 

Ford-Fulkerson方法

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

  算法流程如下:

  設隊列Q:存儲當前未訪問的節點,隊首節點出隊后,成為已檢查的標點;

  Path數組:存儲當前已訪問過的節點的增廣路徑;

  Flow數組:存儲一次BFS遍歷之后流的可改進量;

  Repeat:

    Path清空;

    源點S進入PathQPath[S]<-0Flow[S]<-+∞;

    While Q非空 and 匯點T未訪問 do

        Begin

            隊首頂點u出對;

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

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

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

    End while

   

    If(匯點T已訪問)

    Then 從匯點T沿著Path構造殘余網絡;

  Until 匯點T未被訪問

 

應用實例

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

  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;      //更新正向邊的實際容量
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

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

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

很好很詳細  回復  更多評論   

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

好東西啊 經常搜到大牛的博客  回復  更多評論   

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

太好了,深入淺出  回復  更多評論   

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

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

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

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

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

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

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

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

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

收藏了,謝謝了,寫的很好  回復  更多評論   

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

這圖……是……NOI2006WC的……***~~~@@@  回復  更多評論   

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

錯的圖  回復  更多評論   

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

1,1吧@ss
  回復  更多評論   

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

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

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

講解很清晰  回復  更多評論   

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

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

<2025年11月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456

導航

統計

常用鏈接

留言簿(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>
            午夜精品一区二区三区四区| 欧美一区二区啪啪| 欧美国产乱视频| 开元免费观看欧美电视剧网站| 一片黄亚洲嫩模| 亚洲第一精品电影| 欧美成年人在线观看| 亚洲激情在线观看| 最新中文字幕亚洲| 欧美日韩在线不卡一区| 亚洲欧美日韩一区二区三区在线| 一区电影在线观看| 国产伦精品一区二区三区免费迷| 久久人人爽人人爽爽久久| 久久免费黄色| 亚洲色图综合久久| 欧美一二三区在线观看| 在线观看91久久久久久| 日韩一级大片在线| 国产一区深夜福利| 亚洲久色影视| 国产专区一区| 99国产精品99久久久久久| 国产精品日韩欧美一区| 蜜桃av噜噜一区二区三区| 欧美美女bb生活片| 久久久水蜜桃| 欧美日韩中文字幕日韩欧美| 久久成人综合网| 欧美日本一区| 蜜乳av另类精品一区二区| 欧美日韩中文字幕在线视频| 免费成人av资源网| 国产精品久久久久av免费| 欧美激情导航| 国产在线乱码一区二区三区| 亚洲精品久久视频| 亚洲第一区中文99精品| 亚洲色在线视频| 亚洲精品麻豆| 久久久精品动漫| 午夜精品久久久久久久久久久久| 免费在线看一区| 久久精品一区二区三区不卡| 欧美色偷偷大香| 欧美成人午夜激情视频| 国产一区二区三区精品久久久| 9l国产精品久久久久麻豆| 亚洲激情成人在线| 久久精品国产亚洲aⅴ| 午夜激情久久久| 欧美午夜不卡影院在线观看完整版免费| 久久综合久久88| 国产午夜精品一区二区三区欧美 | 中文精品99久久国产香蕉| 久久精品国产亚洲一区二区| 亚洲免费视频一区二区| 欧美日韩成人综合天天影院| 亚洲成色www久久网站| 影音先锋另类| 久久免费视频在线观看| 久久先锋资源| 国内精品嫩模av私拍在线观看 | 蜜臀av一级做a爰片久久| 国产乱码精品一区二区三区不卡| 夜夜嗨av一区二区三区四季av| 日韩一区二区精品葵司在线| 欧美成人免费小视频| 欧美风情在线| 最近中文字幕日韩精品| 欧美成年人网| 亚洲精品色图| 亚洲一区www| 国产精品视频在线观看| 亚洲在线一区二区三区| 免费国产自线拍一欧美视频| 中日韩视频在线观看| 欧美激情精品久久久久久蜜臀 | 99精品国产在热久久下载| 欧美大片在线看| 亚洲麻豆av| 午夜视频久久久| 国产麻豆91精品| 久久成人这里只有精品| 免费成人小视频| 日韩一区二区福利| 国产精品私房写真福利视频| 午夜在线视频一区二区区别| 久久综合久久综合久久综合| 亚洲欧洲视频在线| 欧美色区777第一页| 亚洲欧美清纯在线制服| 老司机精品久久| 一区二区三区国产| 国产日韩欧美一区二区三区四区| 欧美在线高清| 亚洲精品国精品久久99热| 亚洲在线免费| 亚洲第一页在线| 国产精品成人免费精品自在线观看| 羞羞漫画18久久大片| 亚洲国产欧美一区二区三区久久| 亚洲一区国产视频| 在线国产欧美| 欧美性做爰毛片| 美女999久久久精品视频| 一区二区三区国产精品| 米奇777在线欧美播放| 亚洲资源av| 亚洲精品免费一二三区| 国产视频一区欧美| 欧美日韩国产91| 久久免费视频在线| 亚洲一区免费观看| 亚洲精品国产视频| 欧美二区乱c少妇| 久久国产精品黑丝| 亚洲一区二区成人| 亚洲欧洲日韩女同| 狠狠干成人综合网| 国产精品视频免费| 欧美日韩国产在线| 免费在线亚洲| 久久久久国产精品一区| 亚洲欧美电影院| 亚洲天堂网站在线观看视频| 亚洲人成精品久久久久| 嫩草国产精品入口| 蜜桃久久av| 久久综合久久久| 久久久久成人网| 欧美影院成人| 欧美一区二区高清| 午夜精品一区二区三区在线视 | 黄色小说综合网站| 国产欧美日韩一区二区三区| 欧美亚州一区二区三区| 欧美日韩午夜精品| 欧美日韩国产一区精品一区| 欧美黄色免费网站| 女同一区二区| 欧美二区在线观看| 欧美国产免费| 欧美高清视频免费观看| 欧美黄色视屏| 欧美日韩国产欧| 欧美日韩一区二区视频在线观看| 欧美日韩国产不卡在线看| 欧美日本韩国一区| 欧美日韩午夜| 国产精品日本一区二区 | 久久久久免费| 另类av一区二区| 欧美精品成人一区二区在线观看| 欧美国产视频在线| 欧美日韩亚洲综合在线| 国产精品国产自产拍高清av王其| 欧美视频在线观看视频极品| 国产精品国产自产拍高清av王其 | 国产精品美女久久久久久久| 国产精品久久久久久超碰| 国产美女精品免费电影| 永久久久久久| 日韩午夜在线观看视频| 亚洲在线观看免费| 久久精品综合网| 欧美激情一区二区三区成人| 亚洲人成网在线播放| 亚洲一区二区在线免费观看视频 | 一区二区三区高清| 性色av一区二区怡红| 开元免费观看欧美电视剧网站| 欧美激情按摩| 国产精品一区久久久| 伊甸园精品99久久久久久| 99国内精品久久久久久久软件| 午夜精品视频在线| 美女脱光内衣内裤视频久久影院 | 亚洲高清久久| 亚洲天堂久久| 免费成人av| 国产精品久久久久久影视 | 欧美午夜不卡| 影音先锋久久| 亚洲一区二区三区精品在线| 久久综合成人精品亚洲另类欧美| 亚洲人成网站色ww在线| 欧美与欧洲交xxxx免费观看| 欧美精品午夜| 尤物yw午夜国产精品视频明星 | 亚洲国产人成综合网站| 亚洲一区二区三区免费视频 | 亚洲欧美视频| 亚洲电影天堂av| 欧美亚洲在线| 欧美午夜理伦三级在线观看| 亚洲高清在线视频| 久久久国产精彩视频美女艺术照福利| 亚洲人成在线影院| 另类综合日韩欧美亚洲|