首页 > 代码库 > 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));}
View Code

这个是我第一次在hiho上做的网络流的题目。。好像还是套的别人的ek模板。

 

hihoCoder 1369 网络流一·Ford-Fulkerson算法 (网络流学习#1 记录)