记得把数组开大一点,不然就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 (最小费用最大流模板)的更多相关文章

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

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

  2. 洛谷P3381 最小费用最大流

    费用流板子 还是一道板子题..先练练手 #include <bits/stdc++.h> #define INF 0x3f3f3f3f #define full(a, b) memset( ...

  3. 洛谷 [P3381] 最小费用最大流模版

    #include <iostream> #include <cstdio> #include <cstring> #include <cmath> #i ...

  4. 【Luogu】P3381最小费用最大流模板(SPFA找增广路)

    题目链接 哈  学会最小费用最大流啦 思路是这样. 首先我们有一个贪心策略.如果我们每次找到单位费用和最短的一条增广路,那么显然我们可以把这条路添加到已有的流量里去——不管这条路的流量是多大,反正它能 ...

  5. 图论算法-最小费用最大流模板【EK;Dinic】

    图论算法-最小费用最大流模板[EK;Dinic] EK模板 const int inf=1000000000; int n,m,s,t; struct node{int v,w,c;}; vector ...

  6. HDU3376 最小费用最大流 模板2

    Matrix Again Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 102400/102400 K (Java/Others)To ...

  7. 最大流 && 最小费用最大流模板

    模板从  这里   搬运,链接博客还有很多网络流题集题解参考. 最大流模板 ( 可处理重边 ) ; const int INF = 0x3f3f3f3f; struct Edge { int from ...

  8. Doctor NiGONiGO’s multi-core CPU(最小费用最大流模板)

    题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=693 题意:有一个 k 核的处理器和 n 个工作,全部的工作都须要在一个核上处理一个单位的 ...

  9. 【网络流#2】hdu 1533 - 最小费用最大流模板题

    最小费用最大流,即MCMF(Minimum Cost Maximum Flow)问题 嗯~第一次写费用流题... 这道就是费用流的模板题,找不到更裸的题了 建图:每个m(Man)作为源点,每个H(Ho ...

  10. poj 2195 最小费用最大流模板

    /*Source Code Problem: 2195 User: HEU_daoguang Memory: 1172K Time: 94MS Language: G++ Result: Accept ...

随机推荐

  1. javascript相邻节点元素获取

    <script> window.onload = function () { var myLinkItem = document.getElementById('linkItem'); v ...

  2. 关于微信小程序生产环境体验版获取不到openId的问题(大坑)

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_119 我们知道openid是微信用户验证的重要标识,支付功能严重依赖这个东西,之前我们做微信支付的时候是通过在微信客户端直接调用官 ...

  3. JS 字符串转 GBK 编码超精简实现

    前言 JS 中 GBK 编码转字符串是非常简单的,直接调用 TextDecoder 即可: const gbkBuf = new Uint8Array([196, 227, 186, 195, 49, ...

  4. JUC源码学习笔记4——原子类,CAS,Volatile内存屏障,缓存伪共享与UnSafe相关方法

    JUC源码学习笔记4--原子类,CAS,Volatile内存屏障,缓存伪共享与UnSafe相关方法 volatile的原理和内存屏障参考<Java并发编程的艺术> 原子类源码基于JDK8 ...

  5. CF 559C - Gerald and Giant Chess (组合计数)

    \(C_{x+y}^y\)的公式,DP容斥删多余贡献. #include <cstdio> #include <iostream> #include <cstring&g ...

  6. 技术专家说 | 如何基于 Spark 和 Z-Order 实现企业级离线数仓降本提效?

    [点击了解更多大数据知识] 市场的变幻,政策的完善,技术的革新--种种因素让我们面对太多的挑战,这仍需我们不断探索.克服. 今年,网易数帆将持续推出新栏目「金融专家说」「技术专家说」「产品专家说」等, ...

  7. 文件分享工具ShareLocalFile不需要云盘的实时上传下载文件的云盘工具可以搜索整个网络的文件

    工具的下载地址:https://comm.zhaimaojun.cn/AllSources/ToolDetail/?tid=9693 这是一个未来的项目,可以分享我们的文件,目前由于个人的技术水平限制 ...

  8. Atcoder Beginner Contest 200 E. Minflip Summation(概率数论)

    题面 一个字符串 T T T 是由一个包含 0.1.? 的字符串 S S S 循环连接 K K K 次获得的. 字符串 T T T 中的每个 ? 都可以换成 0 或 1 ,假设 T T T 中一共有 ...

  9. Cannot resolve method 'println(java.lang.String)'

    jsp文件中println爆红 <% int sum = 0; for (int i = 1; i <=100 ; i++) { sum+=i; } out.println("& ...

  10. MySQL插入重复数据

    MySQL中批量insert into时防止更新插入重复数据去重的方法,主要是讲到了ignore,Replace,ON DUPLICATE KEY UPDATE三种方法 方案一:使用ignore关键字 ...