洛谷P3381 (最小费用最大流模板)
记得把数组开大一点,不然就RE了。。。
1 #include<bits/stdc++.h>
2 using namespace std;
3 #define int long long
4 const int N=5e5;
5 const int M=5e5;
6 const int INF=0x3f3f3f3f;
7
8 int n,m,s,t,ans,d[N],maxflow;
9 int tot=1,adj[N],nex[M],to[M],cap[M],cost[M];
10 bool walk[N],vis[N];
11
12 void add(int u,int v,int w,int c){
13 nex[++tot]=adj[u];
14 adj[u]=tot;
15 to[tot]=v;
16 cap[tot]=w;
17 cost[tot]=c;
18 }
19
20 bool SPFA(){
21 queue<int> q;
22 for(int i=1;i<=n;i++)
23 vis[i]=false,walk[i]=false,d[i]=INF;
24 q.push(s),d[s]=0,vis[s]=true;
25 while(!q.empty()){
26 int u=q.front();q.pop();
27 vis[u]=false;
28 for(int i=adj[u];i;i=nex[i]){
29 int v=to[i];
30 if(cap[i]>0&&d[u]+cost[i]<d[v]){
31 d[v]=d[u]+cost[i];
32 if(!vis[v]){
33 vis[v]=true;
34 q.push(v);
35 }
36 }
37 }
38 }
39 return d[t]<INF;
40 }
41
42 int dinic(int u,int fw){
43 if(u==t){
44 ans+=fw*d[t];
45 return fw;
46 }
47 walk[u]=true;
48 int rest=fw;
49 for(int i=adj[u];i&&rest;i=nex[i]){
50 int v=to[i];
51 if(!walk[v]&&cap[i]>0&&d[u]+cost[i]==d[v]){
52 int k=dinic(v,min(cap[i],rest));
53 if(k){
54 cap[i]-=k;cap[i^1]+=k;
55 rest-=k;
56 }
57 }
58 }
59 return fw-rest;
60 }
61
62 void solve(){
63 maxflow=ans=0;
64 while(SPFA()) maxflow+=dinic(s,INF);
65 }
66
67 signed main(){
68 cin>>n>>m>>s>>t;
69 for(int i=1;i<=m;i++){
70 int u,v,w,c;
71 cin>>u>>v>>w>>c;
72 add(u,v,w,c);
73 add(v,u,0,-c);
74 }
75 solve();
76 cout<<maxflow<<" "<<ans;
77 return 0;
78 }
洛谷P3381 (最小费用最大流模板)的更多相关文章
- 洛谷P3381 最小费用最大流模板
https://www.luogu.org/problem/P3381 题目描述 如题,给出一个网络图,以及其源点和汇点,每条边已知其最大流量和单位流量费用,求出其网络最大流和在最大流情况下的最小费用 ...
- 洛谷P3381 最小费用最大流
费用流板子 还是一道板子题..先练练手 #include <bits/stdc++.h> #define INF 0x3f3f3f3f #define full(a, b) memset( ...
- 洛谷 [P3381] 最小费用最大流模版
#include <iostream> #include <cstdio> #include <cstring> #include <cmath> #i ...
- 【Luogu】P3381最小费用最大流模板(SPFA找增广路)
题目链接 哈 学会最小费用最大流啦 思路是这样. 首先我们有一个贪心策略.如果我们每次找到单位费用和最短的一条增广路,那么显然我们可以把这条路添加到已有的流量里去——不管这条路的流量是多大,反正它能 ...
- 图论算法-最小费用最大流模板【EK;Dinic】
图论算法-最小费用最大流模板[EK;Dinic] EK模板 const int inf=1000000000; int n,m,s,t; struct node{int v,w,c;}; vector ...
- HDU3376 最小费用最大流 模板2
Matrix Again Time Limit: 5000/2000 MS (Java/Others) Memory Limit: 102400/102400 K (Java/Others)To ...
- 最大流 && 最小费用最大流模板
模板从 这里 搬运,链接博客还有很多网络流题集题解参考. 最大流模板 ( 可处理重边 ) ; const int INF = 0x3f3f3f3f; struct Edge { int from ...
- Doctor NiGONiGO’s multi-core CPU(最小费用最大流模板)
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=693 题意:有一个 k 核的处理器和 n 个工作,全部的工作都须要在一个核上处理一个单位的 ...
- 【网络流#2】hdu 1533 - 最小费用最大流模板题
最小费用最大流,即MCMF(Minimum Cost Maximum Flow)问题 嗯~第一次写费用流题... 这道就是费用流的模板题,找不到更裸的题了 建图:每个m(Man)作为源点,每个H(Ho ...
- poj 2195 最小费用最大流模板
/*Source Code Problem: 2195 User: HEU_daoguang Memory: 1172K Time: 94MS Language: G++ Result: Accept ...
随机推荐
- C++ 弹幕游戏
可能会持续更新吧,, 我们说一下固定弹,直线轨迹的做法 . 首先放一个 Kaguya 的波粒: 境符「波与粒的境界」 since C++98,系统要求 Windows . #include <c ...
- 机器学习(公式推导与代码实现)--sklearn机器学习库
一.scikit-learn概述 1.sklearn模型 sklearn全称是scikit-learn,它是一个基于Python的机器学习类库,主要建立在NumPy.Pandas.SciPy和Ma ...
- [极客大挑战 2019]HardSQL-1
1.打开之后万能密码等均被过滤,那就先确定下过滤的内容,采用brup抓包进行爆破,发现对union进行了过滤,因此这里就没法使用联合注入,结果如下: 爆破得字典: ^ & && ...
- GCC常见命令
rwx 对于目录和文件的区别 文件 目录 r 文件的内容可以被查看.支持cat.more.head...vim 目录的内容可以被查看.ls.tree w 文件的内容可以被添加.修改.删除.vim &g ...
- java-Servlet-cookie and session
1 状态管理 a) 什么是状态管理?将浏览器与web服务器之间多次交互当做一个整体处理,并且将多次交互涉及的数据(即状态)保存下来. b) 如何进行状态管理? 可以将状态保存在客户端将状态保存到浏览器 ...
- Canvas 线性图形(二):圆形
函数 arc(x, y, radius, startAngle, endAngle, counterclockwise) 参数名 描述 x.y 圆心坐标轴 radius 圆的半径 startAngle ...
- ArkUI 自定义组件
基础入门 组件可以把一段代码封装起来,目的是提高这一段代码的复用率,并且也可以减少开发人员多次编写相同的代码.一旦组件定义好了之后,在页面中只需要通过<element /> 标签引入进来就 ...
- Python自学教程1-安装pycharm和执行环境
Python虽然简单,但是很多没有接触过的学起来还是比较困难的.因此很多人会报班去学,我觉得不需要花那个钱,只要方向正确,加上核心知识点的提炼,自学一个月左右就能上手. 我尝试写下这个自学教程,只讨论 ...
- 字节跳动基于ClickHouse优化实践之“多表关联查询”
更多技术交流.求职机会.试用福利,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 相信大家都对大名鼎鼎的ClickHouse有一定的了解了,它强大的数据分析性能让人印象深刻.但在字节大量 ...
- Vmware虚拟主机启动卡死问题解决
记录一次虚拟主机开机卡死,黑屏,无法操作的问题 一.问题现象 1.在vmware上新建数台主机后,第一次启动都正常,部分主机出现关机后再开机(或直接重启)卡死的情况: 2.在vmware上右键菜单栏均 ...