hdoj-1532-edmondsKarp最大流算法模板

来源:互联网 发布:文件夹恢复软件 编辑:程序博客网 时间:2024/05/19 22:57
#include<cstdio>#include<queue>#include<cstring>using namespace std;int m,n,mp[205][205],a,b,c,path[205],flow[205];int bfs(){    queue<int>qu;    qu.push(1);    memset(path,-1,sizeof(path));        path[1] = 0;    flow[1] = 2100000000;    while(!qu.empty())    {        int t = qu.front();        qu.pop();        if(t==n)break;        for(int i=1;i<=n;i++)          if(path[i]==-1&&mp[t][i])          {              flow[i] = flow[t]<mp[t][i]?flow[t]:mp[t][i];              path[i] = t;              qu.push(i);          }    }    if(path[n]==-1)return -1;    else return flow[n];}int edmondsKarp(){    int maxFlow = 0,va;    while(va=bfs())    {        if(va==-1)break;        maxFlow+=va;        int now = n;        while(now!=1){            int pre = path[now];            mp[pre][now]-=va;            mp[now][pre]+=va;            now = pre;        }    }    return maxFlow;}int main(){    while(scanf("%d%d",&m,&n)!=EOF)    {      memset(mp,0,sizeof(mp));      while(m--)      {          scanf("%d%d%d",&a,&b,&c);          mp[a][b] += c;      }      printf("%d\n",edmondsKarp());    }    return 0;}
0 0
原创粉丝点击