<题目链接>

题目大意:

给定一张图,给定条边的容量和单位流量费用,并且给定源点和汇点。问你从源点到汇点的最带流和在流量最大的情况下的最小费用。

解题分析:

最小费用最大流果题。

下面的是MCMF的模板。想学ZKW费用流最小费用流的原始对偶 (Primal-Dual) 算法的同学,可以看看ZKW本人(Orz)的讲解  >>>

#include <bits/stdc++.h>
using namespace std;
int h[],d[],used[],que[],last[];
int cnt=,INF=0x3f3f3f3f,ans1=,ans2=;
#define clr(a,b) memset(a,b,sizeof(a))
template<typename T>
inline void read(T&x){
x=;int f=;char c=getchar();
while(c<'' || c>''){ if(c=='-')f=-;c=getchar(); }
while(c>='' && c<=''){ x=x*+c-'';c=getchar(); }
x*=f;
}
struct Edge{ int to,cap,cost,next; }e[]; inline void add(int from,int to,int c1,int c2){
e[++cnt]=(Edge){to,c1,c2,h[from]};h[from]=cnt;
e[++cnt]=(Edge){from,,-c2,h[to]};h[to]=cnt;
}
bool spfa(int s,int t){ //slf优化
clr(last,);clr(d,INF);clr(used,);
int head,tail;
tail=head=;
que[tail]=s;used[s]=;d[s]=;
while(head<=tail){ //数组模拟双端队列
int x=que[head++];
for(int i=h[x];i;i=e[i].next){
if(e[i].cap&&d[x]+e[i].cost<d[e[i].to]){ //如果这条路上还有残余容量,就更新其费用,让其费用最小
d[e[i].to]=d[x]+e[i].cost;
last[e[i].to]=i; //记录这个点的最大费用所对应的前一条边的编号
if(!used[e[i].to]){
if(d[e[i].to]<d[que[head]])que[--head]=e[i].to; //如果这个点的费用小于队列的头部的话,就将它塞入队列头部
else que[++tail]=e[i].to; //否则的话,塞入队尾
used[e[i].to]=;
}
}
}
used[x]=;
}
return d[t]!=INF;
}
void MCMF(int t){
int minn=INF;
for(int i=last[t];i;i=last[e[i^].to])minn=min(minn,e[i].cap); //沿着那个记录的反向增广路径更新这条路上的最小容量
ans1+=minn;
for(int i=last[t];i;i=last[e[i^].to]){
ans2+=e[i].cost*minn; //费用=单位流量费用*流量
e[i].cap-=minn; //正向边容量-=minn
e[i^].cap+=minn; //反向边容量+=minn
}
}
int main(){
int n,m,s,t;
read(n);read(m);read(s);read(t);
for(int i=;i<=m;i++){
int x,y,w,f;read(x);read(y);read(w);read(f);
add(x,y,w,f);
}
while(spfa(s,t))MCMF(t);
printf("%d %d\n",ans1,ans2);
}

Luogu P3381 (模板题) 最小费用最大流的更多相关文章

  1. 费用流+SPFA ||Luogu P3381【模板】最小费用最大流

    题面:[模板]最小费用最大流 代码: #include<cstdio> #include<cstring> #include<iostream> #include& ...

  2. P3381 【模板】最小费用最大流

    P3381 [模板]最小费用最大流 题目描述 如题,给出一个网络图,以及其源点和汇点,每条边已知其最大流量和单位流量费用,求出其网络最大流和在最大流情况下的最小费用. 输入输出格式 输入格式: 第一行 ...

  3. P3381 【模板】最小费用最大流(MCMF)

    P3381 [模板]最小费用最大流 题目描述 如题,给出一个网络图,以及其源点和汇点,每条边已知其最大流量和单位流量费用,求出其网络最大流和在最大流情况下的最小费用. 输入格式 第一行包含四个正整数N ...

  4. 洛谷P3381 - 【模板】最小费用最大流

    原题链接 题意简述 模板题啦~ 题解 每次都以费用作为边权求一下最短路,然后沿着最短路增广. Code //[模板]最小费用最大流 #include <cstdio> #include & ...

  5. 费用流+SPFA ||【模板】最小费用最大流

    题面:[模板]最小费用最大流 代码: #include<cstdio> #include<cstring> #include<iostream> #include& ...

  6. Luogu--3381 【模板】最小费用最大流

    题目链接 3381 [模板]最小费用最大流 手写堆版本 dijkstra   400+ms 看来优先队列的常数好大 #include<bits/stdc++.h> using namesp ...

  7. 最小费用最大流 学习笔记&&Luogu P3381 【模板】最小费用最大流

    题目描述 给出一个网络图,以及其源点和汇点,每条边已知其最大流量和单位流量费用,求出其网络最大流和在最大流情况下的最小费用. 题目链接 思路 最大流是没有问题的,关键是同时保证最小费用,因此,就可以把 ...

  8. 最小费用最大流(luogu P3381 【模板】最小费用最大流)

    题目链接 题目描述 如题,给出一个网络图,以及其源点和汇点,每条边已知其最大流量和单位流量费用,求出其网络最大流和在最大流情况下的最小费用. 输入输出格式 输入格式: 第一行包含四个正整数N.M.S. ...

  9. 洛谷 P3381【模板】最小费用最大流

    题目描述 如题,给出一个网络图,以及其源点和汇点,每条边已知其最大流量和单位流量费用,求出其网络最大流和在最大流情况下的最小费用. 输入输出格式 输入格式: 第一行包含四个正整数N.M.S.T,分别表 ...

随机推荐

  1. idea 错误: 找不到或无法加载主类

    1.cmd进入项目目录 2.输入maven命令重构项目 mvn clean mvn idea:idea install

  2. 深入理解JAVA中的代理模式

    前言 代理是什么 事故现场:我家的宠物今天生病了,而我又没有相关的医学知识,所以我只让我的宠物多喝热水吗? 结果显然是不行的,所以我需要去找宠物医生这些更专业的人来帮我的宠物治病. 这个时候,代理就出 ...

  3. Mathematica 代码

    s1 = ContourPlot3D[x^2 + z^2 == 1, {x, -1, 1}, {y, 0, 1}, {z, -1, 1}] s2 = ContourPlot3D[ y == 1 + S ...

  4. 解决python编码问题

    从网上抓了一些字节流,想打印出来结果发生了一下错误: UnicodeEncodeError: 'gbk' codec can't encode character '\xbb' in position ...

  5. robotframework导入测试库使用方法

    1.新建一个测试库 course_mgr.py,存在一个函数listCourse 2.新建RF测试用例使用listCourse关键字 导入测试库如下方式 course_mgr若存在上级目录,则需要加上 ...

  6. java项目部署常用linux命令

    1.显示当前所有java进程pid的命令:jps2.查找文件或文件夹目录查找目录:find /(查找范围) -name '查找关键字' -type d查找文件:find /(查找范围) -name 查 ...

  7. day 22 - 2 面向对象练习

    练习一 在终端输出如下信息 小明,10岁,男,上山去砍柴小明,10岁,男,开车去东北小明,10岁,男,最爱大保健老李,90岁,男,上山去砍柴老李,90岁,男,开车去东北老李,90岁,男,最爱大保健老张 ...

  8. android shape 圆圈 圆环 圆角

    定义圆圈:比如角标: xml布局文件 <TextView android:id="@+id/item_order_pay_count" android:layout_widt ...

  9. 【转】Python多进程编程

    [转]Python多进程编程 序. multiprocessingpython中的多线程其实并不是真正的多线程,如果想要充分地使用多核CPU的资源,在python中大部分情况需要使用多进程.Pytho ...

  10. gym 102059A 树链剖分后odt维护区间

    题意 一棵树 多次修改,每次修改一个点到根的所有边的颜色,并询问现在有哪些颜色染了恰好$m$条边 题解: 稍加思考可以知道,从某个点到根节点的颜色数,均摊复杂度很低,因此,可以考虑珂朵莉树维护重链剖分 ...