首页 > 代码库 > hihoCoder 1369 网络流一·Ford-Fulkerson算法 (网络流学习#1 记录)
hihoCoder 1369 网络流一·Ford-Fulkerson算法 (网络流学习#1 记录)
题目链接:http://hihocoder.com/problemset/problem/1369
代码:
#include<cstdio>#include<queue>#include<cstring>#include<algorithm>#include<cstdlib>#define INF 0x3f3f3f3fusing namespace std;int mp[505][506]={0};bool visit[506];int pre[506];int m,n;bool bfs(int s,int t) //寻找一条从s到t的增广路,若找到返回true{ int p; queue<int>q; memset(pre,-1,sizeof(pre)); memset(visit,false,sizeof(visit)); pre[s]=s; visit[s]=true; q.push(s); while(!q.empty()) { p=q.front(); q.pop(); for(int i=1;i<=n;i++) { if(mp[p][i]>0&&!visit[i]) { pre[i]=p; visit[i]=true; if(i==t) return true; q.push(i); } } } return false;}int EdmondsKarp(int s,int t){ int maxflow=0,d,i; while(bfs(s,t)) { d=INF; for(i=t;i!=s;i=pre[i]) d=d<mp[pre[i]][i]? d:mp[pre[i]][i]; for(i=t;i!=s;i=pre[i]) { mp[pre[i]][i]-=d; mp[i][pre[i]]+=d; } maxflow+=d; } return maxflow;}int main(){ int a,b,c; scanf("%d%d",&n,&m); for(int i=0;i<m;i++) { scanf("%d%d%d",&a,&b,&c); mp[a][b]+=c; } printf("%d\n",EdmondsKarp(1,n));}
这个是我第一次在hiho上做的网络流的题目。。好像还是套的别人的ek模板。
hihoCoder 1369 网络流一·Ford-Fulkerson算法 (网络流学习#1 记录)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。