首页 > 其他 > 详细

费用流板子

时间:2019-05-20 01:43:56      阅读:167      评论:0      收藏:0      [点我收藏+]
bool spfa(){
	queue<int>que;
	que.push(s);
	memset(dis,INF,sizeof(dis));
	dis[s]=0;
	while(!que.empty()){
		int u=que.front();
		que.pop();
		vis[u]=0;
		for(int i=head[u];~i;i=edge[i].nextt){
			int v=edge[i].v;
			if(edge[i].w&&dis[v]>dis[u]+edge[i].cost){
				dis[v]=dis[u]+edge[i].cost;
				if(!vis[v])
					que.push(v),vis[v]=1;
			}
		}
	}
	return dis[t]!=INF;
}
int dfs(int u,int fl){
	if(u==t){
		return fl;
	}
	int ans=0;
	vis[u]=1;
	for(int i=cur[u];~i;i=edge[i].nextt){
		int v=edge[i].v;
		if(!vis[v]&&edge[i].w&&dis[v]==dis[u]+edge[i].cost){
			cur[u]=i;
			int x=dfs(v,min(fl-ans,edge[i].w));
			ans+=x;
			edge[i].w-=x;
			edge[i^1].w+=x;
			mincost+=x*edge[i].cost;
			if(ans==fl)
				break;
		}
	}
	vis[u]=0;
	return ans;
}
void MCMF(){
	
	while(spfa()){
		for(int i=0;i<=t;i++)
			cur[i]=head[i];
		dfs(s,INF);
	}
}

  

费用流板子

原文:https://www.cnblogs.com/starve/p/10891576.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!