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

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

点我

扯远了...

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

有没有想起什么?

思考一下......

对,最短路径!

所以我们完全可以用已死的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. hdu5791 TWO

    hdu5791 TWO 题意 给你两个数串 问你两个数串有多少子串一致 子串不一定是连续的 解法 我们设 \(dp[i][j]\) 表示A串匹配到 i 位,B串匹配到 j 位,一致的子串数.那么我们有 ...

  2. BZOJ 1576 [USACO]安全路经Travel (树剖+线段树)

    题目大意: 给你一张无向图,求1到其他节点 不经过最短路的最后一条边 的最短路长度,保证每个节点的最短路走法唯一 神题,$USACO$题目的思维是真的好 先$dijkstra$出最短路树 对于每个节点 ...

  3. vue如何根据返回的值对元素进行样式渲染

    1.最终显示样式: 需要:根据任务状态值,显示不同颜色的原点表示任务状态,以及对优先级的数据,进行☆标记 2.代码实现: 在<el-table-column>中需要显示的内容前面,添加图标 ...

  4. LaTeX 基本的公式符号命令

    本系列文章由 @YhL_Leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/50240237 下面列出一些基本的LaT ...

  5. COGS——T 886. [USACO 4.2] 完美的牛栏

    http://www.cogs.pro/cogs/problem/problem.php?pid=886 ★★☆   输入文件:stall4.in   输出文件:stall4.out   简单对比时间 ...

  6. 在IDEA中代码自动提示第一个字母大小写必须匹配的解决

    在IDEA中代码自动提示第一个字母大小写必须匹配的解决 学习了:http://blog.csdn.net/babys/article/details/41775715 setting>Edito ...

  7. 微软柯塔娜(Cortana)的一句名言

    近日.媒体频传Win 10装机量已经超过多少千万台.我操心的问题是,集成在Win 10操作系统中的柯塔娜小姐将怎样面对各色各样的人群.由于,在这个世界上.人是最复杂的生物,什么人都有. 依据国外媒体报 ...

  8. hdoj--5500--Reorder the Books(技巧)

    Reorder the Books Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Othe ...

  9. PyCharm基本设置、常用快捷键

    1. 下载安装 PyCharm官方下载地址:  https://www.jetbrains.com/pycharm/download/index.html#section=windows 安装完成后在 ...

  10. mysql裸文件备份XtraBackup (innobackupex)

    结构如下: 热备分为逻辑备份和裸文件备份. 裸文件备份比逻辑备份在速度上更快一些,因为它在底层复制数据文件.世界上唯一一款开源的,能够对INNODB和XtrDB数据库进行热备的开源工具. 他的优点是备 ...