日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

HDU 3549 Flow Problem(最大流模版EK算法)

發(fā)布時間:2023/11/27 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HDU 3549 Flow Problem(最大流模版EK算法) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

題目鏈接

第一道最大流,赤裸裸的模版題,剛好可以熟悉模版用。今天看了一下最大流,就看了一個EK算法,感覺有點和二分圖匹配算法有點相似,對于最大流問題有點了解了,不過為什么這么做,也不是 很懂,只是把代碼給敲了一遍,以后慢慢學習。

EK算法,過程是先BFS找到str到end的一條路,然后每條路上的流量(key[][]記錄)取這些路中流量的最小值(flow[]記錄),在這條路上的流量都減去這個值,然后建立反向邊,然后繼續(xù)找增廣路,直到找不到為止。有前驅的結點不會再找了,所以幾遍之后肯定找不到了。

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <string>
 4 #include <cmath>
 5 #include <queue>
 6 using namespace std;
 7 #define INF 0x7fffffff
 8 int key[101][101];
 9 int path[101],flow[101],n,m,str,end;
10 queue<int>que;
11 int bfs()
12 {
13     int i,t;
14     while(!que.empty()) que.pop();
15     memset(path,-1,sizeof(path));
16     path[str] = 0;
17     flow[str] = INF;//初始化
18     que.push(str);
19     while(!que.empty())//BFS
20     {
21         t = que.front();
22         que.pop();
23         if(t == end) break;//已經(jīng)找到end了
24         for(i = 1;i <= n;i ++)
25         {
26             if(i != str&&key[t][i]&&path[i] == -1)
27             {
28                 flow[i] = flow[t] < key[t][i] ? flow[t]:key[t][i];//記錄流量
29                 que.push(i);
30                 path[i] = t;//記錄前驅
31             }
32         }
33     }
34     if(path[end] == -1)//找不到路徑時
35     return -1;
36     else
37     return flow[end];
38 }
39 int EK()
40 {
41     int ans = 0,pre,now,step;
42     while((step = bfs()) != -1)
43     {
44         ans += step;
45         now = end;
46         while(now != str)
47         {
48             pre = path[now];
49             key[now][pre] += step;
50             key[pre][now] -= step;
51             now = pre;
52         }
53     }
54     return ans;
55 }
56 int main()
57 {
58     int i,t,sv,ev,w,num = 0;
59     scanf("%d",&t);
60     while(t--)
61     {
62         num ++;
63         memset(key,0,sizeof(key));
64         scanf("%d%d",&n,&m);
65         for(i = 1;i <= m;i ++)
66         {
67             scanf("%d%d%d",&sv,&ev,&w);
68             key[sv][ev] += w;
69         }
70         str = 1;end = n;
71         printf("Case %d: %d\n",num,EK());
72     }
73     return 0;
74 }

?

轉載于:https://www.cnblogs.com/naix-x/archive/2012/11/20/2779611.html

總結

以上是生活随笔為你收集整理的HDU 3549 Flow Problem(最大流模版EK算法)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。