题目链接:http://hihocoder.com/problemset/problem/1369
代码:
#include<cstdio> #include<queue> #include<cstring> #include<algorithm> #include<cstdlib> #define INF 0x3f3f3f3f using 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模板。