发了网络流,再来一发费用流

能做费用流的,网络流自然做得来,但在这还是不要脸的安利一下自己的博客(里面也有网络流的题解):

点我

扯远了...

费用流,就是在不炸水管的情况下求源点到汇点的最小费用。

有没有想起什么?

思考一下......

对,最短路径!

所以我们完全可以用已死的SPFA求出不炸水管的最短路径(当然,实在有心理阴影的可以用dijkstra)。

如果你最短路径都不会,还是去 这儿 和 这儿

然后再一把增广路求出最大流与最小费用就好了(我觉得很OK)

献上本蒟蒻的代码:

#include<cstdio>
#define maxn 5050
#define maxm 50005
#define INF 0x3f3f3f3f
inline int read(){
int r=,f=;
char c=getchar();
while(c<''||c>''){if(c=='-')f=-;c=getchar();}
while(c>=''&&c<=''){r=(r<<)+(r<<)+c-'';c=getchar();}
return r*f;
}
int s,t,n,m,head[maxn],pre[maxn],dis[maxn],q[maxn];
bool vis[maxn];
int s_e;
struct E{
int v,c,w,nxt;
}e[maxm*];
struct Max_fei{//本人喜欢结构体
inline void a_e(int u,int v,int c,int w){
e[s_e]=(E){v,c,w,head[u]};
head[u]=s_e++;
}
inline void add(int u,int v,int c,int w){
a_e(u,v,c,w);
a_e(v,u,,-w);
}
inline bool spfa(){
for(int i=;i<=n;i++){
dis[i]=INF;
vis[i]=false;
}
dis[s]=;
vis[s]=true;
q[]=s;
int hd=,tl=;
while(hd^tl){
int u=q[hd++];//循环队列
hd%=maxn;
for(int i=head[u];i!=-;i=e[i].nxt){
int v=e[i].v;
if(dis[v]>dis[u]+e[i].w&&e[i].c){//判断水管还能运水吗
dis[v]=dis[u]+e[i].w;//更新
pre[v]=i;//记录位置
if(vis[v])continue;//如果在队里,那就不进队
vis[v]=true;
q[tl++]=v;
tl%=maxn;
}
}
vis[u]=false;
}
if(dis[t]==INF)return false;
return true;
}
inline int min(int a,int b){//原谅我的手写min
return a<b?a:b;
}
inline int end(int &flow){//flow求最大流
int p,u,Min=1e9,ans=;
for(u=t;u!=s;u=e[p^].v){//因为开始值为0,可以用xor来找反边
p=pre[u];//往前找
Min=min(Min,e[p].c);//找全部经过水管都能流过的最大流 }
for(u=t;u!=s;u=e[p^].v){
p=pre[u];
e[p].c-=Min;
e[p^].c+=Min;
ans+=e[p].w*Min;//加费用
}
flow+=Min;//加最大流
return ans;
}
inline int solve(int &flow){
int ans=;
while(spfa()){
ans+=end(flow);
}
return ans;
}
}Flow;
inline void work(){
n=read();m=read();
s=read();t=read();
for(int i=;i<=n;i++)head[i]=-;//初始值为-1,方便xor
for(int i=;i<=m;i++){
int u=read(),v=read(),c=read(),w=read();
Flow.add(u,v,c,w);
}
int flow=;
int ans=Flow.solve(flow);
printf("%d %d\n",flow,ans);
}
int main(){
work();
return ;
}

题解 洛谷 P3381 【【模板】最小费用最大流】的更多相关文章

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

    记得把数组开大一点,不然就RE了... 1 #include<bits/stdc++.h> 2 using namespace std; 3 #define int long long 4 ...

  2. 洛谷.3381.[模板]最小费用最大流(zkw)

    题目链接 Update:我好像刚知道多路增广就是zkw费用流.. //1314ms 2.66MB 本题优化明显 #include <queue> #include <cstdio&g ...

  3. P3381 [模板] 最小费用最大流

    EK  + dijkstra (2246ms) 开氧气(586ms) dijkstra的势 可以处理负权 https://www.luogu.org/blog/28007/solution-p3381 ...

  4. 【洛谷 p3381】模板-最小费用最大流(图论)

    题目:给出一个网络图,以及其源点和汇点,每条边已知其最大流量和单位流量费用,求出其网络最大流和在最大流情况下的最小费用. 解法:在Dinic的基础下做spfa算法. 1 #include<cst ...

  5. 洛谷.4897.[模板]最小割树(Dinic)

    题目链接 最小割树模板.具体见:https://www.cnblogs.com/SovietPower/p/9734013.html. ISAP不知为啥T成0分了.. Dinic: //1566ms ...

  6. 网络流_spfa最小费用最大流

    最大流: 不断搜索增广路,寻找最小的容量-流量,得到最大流量,但最大流量在有花费时不一定是最小花费. 最小费用最大流 算法思想: 采用贪心的思想,每次找到一条从源点到达汇点的花费最小的路径,增加流量, ...

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

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

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

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

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

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

随机推荐

  1. 安装node-sass及报错后解决方案

    使用npm install 命令安装node-sass时,经常出现安装失败的情况.原因在于npm服务器在美国,还有就是某强大的防火墙作用.导致模块无法下载. 1 npm install node-sa ...

  2. Vue学习之路第七篇:跑马灯项目实现

    前面六篇讲解了Vue的一些基础知识,正所谓:学以致用,今天我们将用前六篇的基础知识,来实现类似跑马灯的项目. 学前准备: 需要掌握定时器的两个函数:setInterval和clearInterval以 ...

  3. Eigen下载安装

    首先提供Eigen的两个重要网站 官方网站 下载地址 1.下载 wget http://bitbucket.org/eigen/eigen/get/3.3.5.tar.gz 2.解压缩 tar -zx ...

  4. CORS与JSONP的区别

    CORS与JSONP: a. JSONP只能实现GET请求,而CORS支持所有类型的HTTP请求. b. 使用CORS,开发者可以使用普通的XMLHttpRequest发起请求和获得数据,比起JSON ...

  5. Aizu - 2306 Rabbit Party (DFS图论)

    G. Rabbit Party Time Limit: 5000ms Case Time Limit: 5000ms Memory Limit: 65536KB 64-bit integer IO f ...

  6. [Maven实战](5)Archetype生成项目骨架

    Hello World项目中有一些Maven的约定:在项目根文件夹中放置pom.xml,在src/main/java文件夹下放置项目的主代码,在sc/test/java中放置项目的測试代码.之所以一步 ...

  7. 揭秘Product Hunt怎样运用邮件崛起

    Product Hunt正被硅谷热议,而大家谈论Product Hunt时,经常涉及邮件营销. Product Hunt由Ryan Hoover 在2013年11月创立.鼓舞人们发现和分享新产品的站点 ...

  8. python 提取主域名和子域名代码——先根据规则提取,如果有问题,则使用tldextract

    import tldextract def extract_domain(domain): suffix = {'.com','.la','.io', '.co', '.cn','.info', '. ...

  9. 20.boost dijkstra最短路径算法

    到某个点的最短距离                到终点的最短路径 完整代码 #include <iostream> #include <string> #include &l ...

  10. scanf正则表达式

    #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> void main() { ] = ...