最大流 代码

来源:互联网 发布:累加和校验算法 编辑:程序博客网 时间:2024/04/29 05:10
#include"stdio.h"#include"string.h"#include"queue"using namespace std;#define N 205const int inf=0x7fffffff;int g[N][N];int pre[N],mark[N];int ek(int n){    int i,u,d,ans=0;    while(1)    {        queue<int>q;        q.push(1);        memset(mark,0,sizeof(mark));        memset(pre,0,sizeof(pre));        mark[1]=1;        while(!q.empty())        {            u=q.front();            q.pop();            for(i=1;i<=n;i++)            {                if(!mark[i]&&g[u][i])                {                    mark[i]=1;                    pre[i]=u;                    q.push(i);                }            }        }        if(pre[n]==0)            break;        d=inf;        for(i=n;i!=1;i=pre[i])        {            d=min(d,g[pre[i]][i]);        }        for(i=n;i!=1;i=pre[i])        {            g[pre[i]][i]-=d;            g[i][pre[i]]+=d;        }        ans+=d;    }    return ans;}int main(){    int n,m,u,v,w;    while(scanf("%d%d",&n,&m)!=-1)    {        memset(g,0,sizeof(g));        while(n--)        {            scanf("%d%d%d",&u,&v,&w);            g[u][v]+=w;        }        printf("%d\n",ek(m));    }    return 0;}

0 0
原创粉丝点击