洛谷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 ...
随机推荐
- 不同云服务器下,ubuntu下开k3s集群
首先先感谢老哥的文章:h构建多云环境下的K3S集群,但是我尝试在centos 8.2上面前面一直执行报错 并且安装glibc 2.17时还会报错make版本太低,所以直接放弃centos,投入ubun ...
- Nginx 浏览器缓存配置指令
# 浏览器缓存 # 当浏览器第一次访问服务器资源的时候,服务器返回到浏览器后,浏览器进行缓存 # 缓存的大概内容有: # 1.缓存过期的日期和时间 # 2.设置和缓存相关的配置信息 # 3.请求资源最 ...
- CF1615G Maximum Adjacent Pairs
\(CF1615G\) Description 给定一个数列 \(a\),你需要将所有 \(a_i=0\) 的位置填上一个 \(1\sim n\) 的正整数,使得数列的「值」最大. 数列的值定义为满足 ...
- Jittered采样类定义和测试
抖动采样算法测试,小图形看不出什么明显区别,还是上代码和测试图吧. 类声明: #pragma once #ifndef __JITTERED_HEADER__ #define __JITTERED_H ...
- React报错之Encountered two children with the same key
正文从这开始~ 总览 当我们从map()方法返回的两个或两个以上的元素具有相同的key属性时,会产生"Encountered two children with the same key&q ...
- docker的volume和bind mount究竟有什么区别?
不知道你在使用docker的时候,有没有注意到volume mount和bind mount的使用? 进一步说,他们之间的区别到底是什么? 接下来的内容,我们就为你揭开他们的神秘面纱. 相同之处 首先 ...
- 教程 - 深度探讨在 Vue3 中引入 CesiumJS 的最佳方式
目录 1. 你应该先知道的基础知识 1.1. CesiumJS 的库构成 1.2. 选择 Vite3 和 pnpm 的理由 1.3. 使用 External 模式引入静态库 - 不打包静态库 1.4. ...
- C# 数组 深拷贝 和 数组传参
前言 C#中引用类型无法使用const,因此传参的时候使用引用类型,一定要注意是否会改变其值.下面介绍几种 数组的 深拷贝方法. 前提 下面的测试代码有一些前提, sw为Stopwatch nForT ...
- nginx的安装和配置
目录 目录 一.购买下载SSL证书 二.修改Nginx配置信息 三.重启Nginx 一.购买下载SSL证书 SSL证书阿里云做活动期间可以免费申请,购买SSL证书时选择单域名-DV SSL-免费版即可 ...
- 解决前端开发报错(SyntaxError: missing : after property id)的问题
当使用对象初始化语法创建对象的时候,需要使用半角冒号 (:) 将属性键与属性值隔开. 1 var obj = { propertyKey: 'value' }; 冒号与等号 下面的代码会运行失败,原因 ...