类似EK算法,只是将bfs改成spfa,求最小花费。

为什么可以呢,加入1-3-7是一条路,求出一个流量为40,那么40*f[1]+40*f[2]+40*f[3],f[1]是第一条路的单位费用,f[2]是。。。

因此可以写成40*(f[1]+f[2]+f[3]),那么f[1]+f[2]+..

ek算法不管先走那条路,最后一定都是最大流maxflow,那么费用是maxflow*路径费用,因此,在保证最大流的前提下,转换成了求最小费用的问题。

即求最短路类似。

另外,为什么可以这样求最小费用最大流呢,因为ek告诉你一定是从源点到汇点有一条可行路,既然每次都要选一条,一定要选最小费用的才最优。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<queue>
using namespace std;
const int maxn=100010;
int n,m,s,t,cnt,hd[maxn],dis[maxn],flow[maxn],vis[maxn],pre[maxn],last[maxn];
queue<int> q;
struct Edge{
int to,nxt,flow,dis;
}edge[maxn];
void add(int u,int v,int w,int dis)
{
cnt++;
edge[cnt].to=v;
edge[cnt].nxt=hd[u];
edge[cnt].flow=w;
edge[cnt].dis=dis;
hd[u]=cnt;
}
int spfa(int s,int t)
{
memset(dis,0x7f,sizeof dis);
memset(flow,0x7f,sizeof flow);
memset(vis,0,sizeof vis);
// while(!q.empty()) q.pop();
q.push(s),vis[s]=1,dis[s]=0,pre[t]=-1; while(!q.empty())
{
int u=q.front();
q.pop();
vis[u]=0;
for(int i=hd[u];i!=-1;i=edge[i].nxt)
{
int v=edge[i].to;
if(edge[i].flow >0 && dis[v]>dis[u]+edge[i].dis)
{
dis[v]=dis[u]+edge[i].dis;
pre[v]=u;
last[v]=i;//
flow[v]=min(flow[u],edge[i].flow);//
if(!vis[v])
{
vis[v]=1;
q.push(v);
}
// if(v==t) return 1;//已经到达,但不一定是最短路,晕,哈哈想成之前的bfs了。。。
}
}
}
// return 0;
return pre[t]!=-1;
}
int mxflow=0,mincost=0;
void mcmf()
{
while(spfa(s,t))//往下走就一定能到达
{
int now=t;
mxflow+=flow[t];
mincost+=flow[t]*dis[t];
while(now!=s)
{
edge[last[now]].flow-=flow[t];
edge[last[now]^1].flow+=flow[t];
now=pre[now];
}
}
}
int x,y,z,f;
int main()
{
scanf("%d%d%d%d",&n,&m,&s,&t);
memset(hd,-1,sizeof hd);cnt=-1;
for(int i=1;i<=m;i++)
{
scanf("%d%d%d%d",&x,&y,&z,&f);
add(x,y,z,f);
add(y,x,0,-f);//顺着流一单位,逆着流一单位,相当于没流
}
mcmf();
printf("%d %d",mxflow,mincost);
}

luogu 3376 最小费用最大流 模板的更多相关文章

  1. 洛谷P3381 最小费用最大流模板

    https://www.luogu.org/problem/P3381 题目描述 如题,给出一个网络图,以及其源点和汇点,每条边已知其最大流量和单位流量费用,求出其网络最大流和在最大流情况下的最小费用 ...

  2. 图论算法-最小费用最大流模板【EK;Dinic】

    图论算法-最小费用最大流模板[EK;Dinic] EK模板 const int inf=1000000000; int n,m,s,t; struct node{int v,w,c;}; vector ...

  3. HDU3376 最小费用最大流 模板2

    Matrix Again Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 102400/102400 K (Java/Others)To ...

  4. 最大流 && 最小费用最大流模板

    模板从  这里   搬运,链接博客还有很多网络流题集题解参考. 最大流模板 ( 可处理重边 ) ; const int INF = 0x3f3f3f3f; struct Edge { int from ...

  5. 【Luogu】P3381最小费用最大流模板(SPFA找增广路)

    题目链接 哈  学会最小费用最大流啦 思路是这样. 首先我们有一个贪心策略.如果我们每次找到单位费用和最短的一条增广路,那么显然我们可以把这条路添加到已有的流量里去——不管这条路的流量是多大,反正它能 ...

  6. Doctor NiGONiGO’s multi-core CPU(最小费用最大流模板)

    题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=693 题意:有一个 k 核的处理器和 n 个工作,全部的工作都须要在一个核上处理一个单位的 ...

  7. 【网络流#2】hdu 1533 - 最小费用最大流模板题

    最小费用最大流,即MCMF(Minimum Cost Maximum Flow)问题 嗯~第一次写费用流题... 这道就是费用流的模板题,找不到更裸的题了 建图:每个m(Man)作为源点,每个H(Ho ...

  8. poj 2195 最小费用最大流模板

    /*Source Code Problem: 2195 User: HEU_daoguang Memory: 1172K Time: 94MS Language: G++ Result: Accept ...

  9. POJ2135 最小费用最大流模板题

    练练最小费用最大流 此外此题也是一经典图论题 题意:找出两条从s到t的不同的路径,距离最短. 要注意:这里是无向边,要变成两条有向边 #include <cstdio> #include ...

随机推荐

  1. linux上的deepin-qq不能显示图片解决方法

    在贴吧发现的一个方法 在终端输入以下命令,重新打开QQ即可 sudo sysctl -w net.ipv6.conf.all.disable_ipv6=1 sudo sysctl -w net.piv ...

  2. A Distributional Perspective on Reinforcement Learning

    郑重声明:原文参见标题,如有侵权,请联系作者,将会撤销发布! arXiv:1707.06887v1 [cs.LG] 21 Jul 2017 In International Conference on ...

  3. 仓库ERP管理系统(springboot)

    查看更多系统:系统大全,课程设计.毕业设计,请点击这里查看 01 系统概述 基于SpringBoot框架和SaaS模式,非常好用的ERP软件,目前专注进销存+财务功能.主要模块有零售管理.采购管理.销 ...

  4. W3C标准和语义化

    一.语义化的理解 根据内容选择合适的标签,便于开发者阅读,在写出更优雅的代码的同时让浏览器很好的解析. 目的 1.在没有CSS的情况下,页面也能呈现出很好的内容结构和代码结构: 2.有利于SEO:和搜 ...

  5. go微服务系列(四) - http api中引入protobuf

    1. protobuf相关依赖安装 2. 改造之前的client 2.1 新建proto文件 2.2 运行protoc命令生成go文件 2.3 然后把原来的map修改成具体的类型就可以了 3. 处理j ...

  6. Istio的流量管理(实操三)

    Istio的流量管理(实操三) 涵盖官方文档Traffic Management章节中的egress部分.其中有一小部分问题(已在下文标注)待官方解决. 目录 Istio的流量管理(实操三) 访问外部 ...

  7. Docker 镜像的备份恢复迁移

    在大家已经学会了如何构建镜像以后,为了备份该镜像,我们有以下几个选择: 我们可以将指定镜像保存成 tar 归档文件,需要使用时将 tar 包恢复为镜像即可: 登录 DockerHub 注册中心,将镜像 ...

  8. Cubmap

    视差 Cubmap https://chengkehan.github.io/LocalCubmap.html http://www.manew.com/thread-93923-1-1.html h ...

  9. 热更新 && 增量更新

    Unity中SLua.Tolua.XLua和ILRuntime效率评测 http://blog.csdn.net/u011467512/article/details/72716376 如何阅读lua ...

  10. WebStorm 运行Rect Native 项目

    今天教大家如何直接使用WebStorm这个IDE直接完成编码+运行项目工作.这样就可以不用打开Xcode了. 1.首先点击WebStorm右上方的下拉箭头弹出的Edit Configurations. ...