标签: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