最小费用最大流模板
来源:互联网 发布:加工中心四轴怎样编程 编辑:程序博客网 时间:2024/06/05 05:49
#include<stdio.h>#include<queue>using namespace std;#include<string.h>#define MIN(a,b) a<b?a:b#define INF 1000000000#define oo 1000000int N,M,K,cnt;int src,des;#define maxn 1000000#define maxm 222struct node{ int u,v,w,c,next;<span style="color:#ffb76f;">//c是费用,w是容量</span>}edge[maxn];int head[maxm],pre[maxm],dist[maxm],delta[maxm];int map[maxm][maxm];void addedge(int u,int v,int w,int c){ edge[cnt].u=u;edge[cnt].v=v;edge[cnt].w=w;edge[cnt].c=c;edge[cnt].next=head[u];head[u]=cnt++; edge[cnt].u=v;edge[cnt].v=u;edge[cnt].w=0;edge[cnt].c=-c;edge[cnt].next=head[v];head[v]=cnt++;}void init(){ cnt=0; memset(head,-1,sizeof(head)); memset(edge,-1,sizeof(edge)); memset(pre,-1,sizeof(pre));}bool SPFA(int x){//在残留网络上寻找最小费用增流链 memset(pre,-1,sizeof(pre));//不能少 queue<int>q; q.push(x); bool vis[maxm]={false}; vis[x]=true; for(int i=0;i<maxm-1;i++) dist[i]=INF; dist[x]=0; //费用 delta[x]=INF; //最小限制流量 while(!q.empty()){ int k=q.front();q.pop();vis[k]=0; for(int i=head[k];i!=-1;i=edge[i].next){ int u=edge[i].v; if(edge[i].w>0&&dist[u]>dist[k]+edge[i].c){ dist[u]=edge[i].c+dist[k];//更新最小费用 pre[u]=i;//记录路径 delta[u]=MIN(delta[k],edge[i].w); if(!vis[u]){ vis[u]=1; q.push(u); } } } } return pre[des]!=-1;//找不到增流链}void update(){ int x=des; while(x!=src){ edge[pre[x]].w-=delta[des]; edge[pre[x]^1].w+=delta[des]; x=edge[pre[x]].u; }}int MCMF(){ int flow=0,Cost=0;//flow为总流量,Cost为总费用 while(SPFA(src)){ Cost+=dist[des]; flow+=delta[des]; update(); //更新残留网络 } return Cost;}
0 0
- 模板[最小费用最大流]
- 最小费用最大流模板
- 最小费用最大流模板
- 最小费用最大流模板
- 最小费用最大流,模板
- 最小费用最大流模板
- 最小费用最大流 模板
- 最小费用最大流模板
- 最小费用最大流模板
- 最小费用最大流模板
- 最小费用最大流模板
- 最小费用最大流模板
- 最小费用最大流模板
- 最小费用最大流模板
- 最小费用最大流模板
- 最小费用最大流模板
- 最小费用最大流模板
- 最小费用最大流模板
- 关于IOS滚动视图
- JVM类加载机制
- Go 语言编译运行的小问题
- (cocos2d-js游戏)选择字体的颜色
- 如何实现Android应用的静默安装
- 最小费用最大流模板
- 【整理】weblogic下发步骤使用命令行代替控制台界面
- ios开发中将代码写的简单与优雅的几个点
- 命令行编译运行Go语言时参数代入的问题
- PHP为什么会被认为是草根语言?
- 友元函数 2个类 定义顺序问题
- android ui界面设计的一些心得与问题解决
- linux下 nginx + tomcat 服务器集群 (1)
- linux下的hostname理解