hdu 1532 Drainage Ditches 最大流
2013-05-22 19:09
411 查看
题目 http://acm.hdu.edu.cn/showproblem.php?pid=1532
这是最大流的一个简单题哦 我是用Edmond-Karp来做的哦 思想是每次找出一条最短路,然后在这条最短路里找出一条边最小的权值哦,
这条路上的边全都都减去最小权值,也是更新哦。重复上述过程,直到没有最短路径出现哦。。。
具体看代码
这是最大流的一个简单题哦 我是用Edmond-Karp来做的哦 思想是每次找出一条最短路,然后在这条最短路里找出一条边最小的权值哦,
这条路上的边全都都减去最小权值,也是更新哦。重复上述过程,直到没有最短路径出现哦。。。
具体看代码
#include<iostream> #include<cstring> #include<cstdio> #include<queue> using namespace std; #define max 201 int map[max][max]; int p[max]; int n,m; bool ek_bfs() //不断寻找最短路哦 { queue<int> que; bool flag[max]; memset(flag,false,sizeof(flag)); //标记哦 memset(p,-1,sizeof(p)); //记录 que.push(1); flag[1]=true; while(!que.empty()) { int e=que.front(); if(e==m) return true; que.pop(); for(int i=1;i<=m;i++) { if(map[e][i]&&!flag[i]) { flag[i]=true; p[i]=e; que.push(i); //入队 } } } return false; } void ek_max_flow() { int u,flow_ans=0,mn; while(ek_bfs()) { mn=9999999; u=m; while(p[u]!=-1) //找出最小的那条路哦 { mn=mn>map[p[u]][u]?map[p[u]][u]:mn; u=p[u]; } flow_ans+=mn; u=m; while(p[u]!=-1) //更新哦 { map[p[u]][u]-=mn; map[u][p[u]]+=mn; u=p[u]; } } cout<<flow_ans<<endl; } int main() { int i,j,t; while(cin>>n>>m) { memset(map,0,sizeof(map)); while(n--) { cin>>i>>j>>t; map[i][j]+=t; } ek_max_flow(); } return 0; }
相关文章推荐
- HDU-1532(网络最大流)
- hdu 1532 Drainage Ditches(最大网络流)
- HDU 1532 Drainage Ditches(最大流)
- poj 1273 hdu 1532 Drainage Ditches 最大流dinic 算法
- hdu 1532(最大流)
- HDU 1532 Drainage Ditches (最大网络流)
- HDU 1532 Drainage Ditches(最大流)
- hdu 1532 Drainage Ditches(图论:最大流增广路)
- HDU 1532 Drainage Ditches(最大流)
- hdu - 1532 Drainage Ditches (最大流)
- HDU_1532 && HDU_3549(最大流EK算法模板)
- hdu 1532 最大流水题
- 【最大流 模板题 EdmondsKarp】HDU - 1532 Drainage Ditches
- hdu1532--Drainage Ditches(最大流(EK算法))
- hdu 1532 Drainage Ditches (最大流)
- hdu 1532 Drainage Ditches 最大流 dinic算法
- poj 1273 & hdu 1532 Drainage Ditches(最大流 )EK,dinic模板
- HDU 1532 Drainage Ditches 最大流
- HDU 1532 Drainage Ditches【E-K 最大流】
- poj 1273 || hdu 1532 Drainage Ditches 最大流