类似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. SpringBoot集成Swagger2,3分钟轻松入手!

    一.引入maven <dependency> <groupId>io.springfox</groupId> <artifactId>springfox ...

  2. 第六篇Scrum冲刺博客--Interesting-Corps

    第六篇Scrum冲刺博客 站立式会议 1.会议照片 2.队友完成情况 团队成员 昨日完成 今日计划 鲍鱼铭 搜索页面以及音乐详情页面数据导入及测试 各界面数据请求云函数设计及实现 叶学涛 进行页面的优 ...

  3. Web自动化必会知识:「Web基础、元素定位、元素操作、Selenium运行原理、项目实战+框架」

    1.web 基础-html.dom 对象.js 基本语法 Dom 对象里面涉及元素定位以及对元素的修改.因为对元素操作当中涉及的一些 js 操作,js 基本语法要会用.得要掌握前端的基本用法.为什么要 ...

  4. Redis主从复制(读写分离)

    主从复制(读写分离):读在从库读,写在主库写. 主从复制的好处:避免redis单点故障构建读写分离架构,满足读多写少的需求. 主从架构: 操作(启动实例,在一台机器上启动不同的实例,进行伪主从复制): ...

  5. Docker 镜像构建之 docker commit

    我们可以通过公共仓库拉取镜像使用,但是,有些时候公共仓库拉取的镜像并不符合我们的需求.尽管已经从繁琐的部署工作中解放出来,但是实际开发时,我们可能希望镜像包含整个项目的完整环境,在其他机器上拉取打包完 ...

  6. Redis秒杀实战-微信抢红包-秒杀库存,附案例源码(Jmeter压测)

    导读 前二天我写了一篇,Redis高级项目实战(点我直达),SpringBoot整合Redis附源码(点我直达),今天我们来做一下Redis秒杀系统的设计.当然啦,Redis基础知识还不过关的,先去加 ...

  7. Java-学习日记(100 == 100为true,1000 == 1000却为false?)

    Integer底层设计 100 == 100为true,1000 == 1000却为false? 之前也写过String的==与equals的注意点,这次写下Integer的底层设计,不妨先运行下下面 ...

  8. Educational Codeforces Round 68 (Rated for Div. 2)-C-From S To T

    You are given three strings ss, tt and pp consisting of lowercase Latin letters. You may perform any ...

  9. webservice的某些配置

    ajax调用的时候配置 <system.webServer> <validation validateIntegratedModeConfiguration="false& ...

  10. pycharm可以运行但无法debug的解决方法

    错误信息:pydev debugger: process 4588 is connecting 如果您尝试了网上的很多方法如防火墙设置,去掉 ".idea"文件,甚至重装pycha ...