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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

hdu 1532(最大流)

發布時間:2025/3/16 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 hdu 1532(最大流) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

解題思路:

這是一道典型的模板題,直接套用EK算法即可。。。我感覺最大流的本質就是能否找到一個從源點到匯點的增廣路徑,并將其最小的邊作為增加值,沿著增廣路上的邊進行更新。


AC:

#include<iostream> #include<cstdio> #include<cstring> #include<queue> using namespace std;const int maxn = 200; const int inf = 0x7fffff; int n,m,s,t,map[maxn][maxn],path[maxn]; //map[i][j]存儲(i,j)的流,path存儲的是增廣路徑 int flow[maxn]; //flow存儲一次BFS遍歷之后流的可改進量int bfs() //尋找一條增廣路徑 {queue<int> q;memset(path,-1,sizeof(path));flow[s] = inf;q.push(s);while(!q.empty()){int now = q.front();q.pop();if(now == t) break;for(int i = 1; i <= m; i++){if(i != s && path[i] == -1 && map[now][i]){flow[i] = flow[now] < map[now][i] ? flow[now] : map[now][i];q.push(i);path[i] = now;}}}if(path[t] == -1) return -1; //找不到增廣路徑return flow[t]; }int Edmonds_Karp() {int max_flow = 0,step,now,pre;while((step = bfs()) != -1) //能夠找到一條增廣路徑{max_flow += step;now = t;while(now != s){pre = path[now];map[pre][now] -= step;map[now][pre] += step;now = pre;}}return max_flow; }int main() {while(cin>>n>>m){int u,v,cost;memset(map,0,sizeof(map));for(int i = 1; i <= n; i++){cin>>u>>v>>cost;map[u][v] += cost;}s = 1; t = m;printf("%d\n",Edmonds_Karp());}return 0; }

總結

以上是生活随笔為你收集整理的hdu 1532(最大流)的全部內容,希望文章能夠幫你解決所遇到的問題。

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