其他分享
首页 > 其他分享> > 网络流EK

网络流EK

作者:互联网

const int maxn=500;
int r[maxn][maxn];
int pre[maxn];
bool vis[maxn];
bool bfs(int s,int t)
{
        queue<int>que;
        memset(pre,0,sizeof(pre));
        memset(vis,false,sizeof(vis));
        pre[s]=s;
        vis[s]=true;
        que.push(s);
        while(!que.empty()){
        int q=que.front();
        que.pop();
        for(int i=1;i<maxn;i++){
                if(r[q][i]>0&&!vis[i]){
                pre[i]=q;
                vis[i]=true;
                if(i==t)
                return true;
                que.push(i);
                }
        }
        }
        return false;
}

int EK(int s,int t)
{
        int flow=0;
       while(bfs(s,t)){
        int d=0x3fffffff;
        for(int i=t;i!=s;i=pre[i])
        d=min(d,r[pre[i]][i]);
        for(int i=t;i!=s;i=pre[i]){
        r[pre[i]][i]-=d;
        r[i][pre[i]]+=d;
        }
        flow+=d;
       }
       return flow;
}

 

标签:pre,return,EK,int,网络,vis,maxn,que
来源: https://blog.csdn.net/m0_43456754/article/details/100068441