标签:pop 技术分享 超过 alt 说明 反向 算法实现 算法 好的

而当找不到增广路的时候,当前的流就是最大流了。



\(cap[a[i]][a[j]]\)-=\(rest\); \(cap[a[j]][a[i]]\)+=\(rest\);
。
#define MAXN 100010
#define INF 0x7fffffff
bool visit[MAXN];
int pre[MAXN];
queue<int> q;
void update(int now,int rest){
    while(pre[now]){
        map[pre[now]][now]-=rest;//正向的-=rest 
        map[now][pre[now]]+=rest;//负向的+=rest 
        now=pre[now];
    }
}
int find(int S,int T){//寻找增广路流量 
    memset(visit,0,sizeof(visit));
    memset(pre,-1,sizeof(pre));
    visit[S]=1; int minn=INF;
    q.push(S);
    while(!q.empty()){
        int now=q.front(); q.pop();
        if(now==t) break;
        for(int i=1;i<=m;i++){
            if(!visit[i]&&MAP[now][i]){
                q.push(i);
                minn=min(minn,map[now][i]);//最小的rest 
                pre[i]=now; visit[i]=1;
            }
        } 
    }
    if(pre[i]==-1) return 0;
    return minn;
}
int EK(int S,int T){ //EK算法主体 
    int new_flow=0;//增广路的流量 
    int max_flow=0;//最大流 
    do{
        new_flow=find(S,T);
        update(T,new_flow);
        max_flow+=new_flow;
    }while(new_flow);
    return max_flow;
}
标签:pop 技术分享 超过 alt 说明 反向 算法实现 算法 好的
原文地址:https://www.cnblogs.com/Yeasio-Nein/p/Flow.html