博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
最小费用最大流
阅读量:5110 次
发布时间:2019-06-13

本文共 1502 字,大约阅读时间需要 5 分钟。

1 #include 
2 #include
3 #include
4 #include
5 #include
6 #define V 10100 7 #define E 1000100 8 #define inf 99999999 9 using namespace std;10 int vis[V];11 int dist[V];12 int pre[V];13 14 struct Edge{15 int u,v,c,cost,next;16 }edge[E];17 int head[V],cnt;18 19 void init(){20 cnt=0;21 memset(head,-1,sizeof(head));22 }23 void addedge(int u,int v,int c,int cost)24 {25 edge[cnt].u=u;edge[cnt].v=v;edge[cnt].cost=cost;26 edge[cnt].c=c;edge[cnt].next=head[u];head[u]=cnt++;27 28 edge[cnt].u=v;edge[cnt].v=u;edge[cnt].cost=-cost;29 edge[cnt].c=0;edge[cnt].next=head[v];head[v]=cnt++;30 }31 32 bool spfa(int begin,int end){33 int u,v;34 queue
q;35 for(int i=0;i<=end+2;i++){36 pre[i]=-1;37 vis[i]=0;38 dist[i]=inf;39 }40 vis[begin]=1;41 dist[begin]=0;42 q.push(begin);43 while(!q.empty()){44 u=q.front();45 q.pop();46 vis[u]=0;47 for(int i=head[u];i!=-1;i=edge[i].next){48 if(edge[i].c>0){49 v=edge[i].v;50 if(dist[v]>dist[u]+edge[i].cost){51 dist[v]=dist[u]+edge[i].cost;52 pre[v]=i;53 if(!vis[v]){54 vis[v]=true;55 q.push(v);56 }57 }58 }59 }60 }61 return dist[end]!=inf;62 }63 64 int MCMF(int begin,int end){65 int ans=0,flow;66 int flow_sum=0;67 while(spfa(begin,end)){68 flow=inf;69 for(int i=pre[end];i!=-1;i=pre[edge[i].u])70 if(edge[i].c
View Code

 

转载于:https://www.cnblogs.com/macinchang/p/4507136.html

你可能感兴趣的文章
php match_model的简单使用
查看>>
在NT中直接访问物理内存
查看>>
Intel HEX 文件格式
查看>>
SIP服务器性能测试工具SIPp使用指导(转)
查看>>
php_扑克类
查看>>
回调没用,加上iframe提交表单
查看>>
(安卓)一般安卓开始界面 Loding 跳转 实例 ---亲测!
查看>>
Mysql 索引优化 - 1
查看>>
LeetCode(3) || Median of Two Sorted Arrays
查看>>
大话文本检测经典模型:EAST
查看>>
待整理
查看>>
一次动态sql查询订单数据的设计
查看>>
C# 类(10) 抽象类.
查看>>
Vue_(组件通讯)子组件向父组件传值
查看>>
jvm参数
查看>>
我对前端MVC的理解
查看>>
Silverlight实用窍门系列:19.Silverlight调用webservice上传多个文件【附带源码实例】...
查看>>
2016.3.31考试心得
查看>>
mmap和MappedByteBuffer
查看>>
Linux的基本操作
查看>>