1 #include<bits/stdc++.h>
2 #define int long long
3 using namespace std;
4 const int maxn=5005;
5 const int inf=0x3f3f3f3f;
6 int tot,n,m,s,t,x,y,z,d[maxn];
7 int adj[maxn],nex[maxn<<1],to[maxn<<1],w[maxn<<1],flow[maxn<<1];
8 void add(int x,int y,int z){
9 nex[tot]=adj[x];
10 adj[x]=tot;
11 to[tot]=y;
12 w[tot]=z;
13 flow[tot++]=0;
14 }
15 bool bfs(){
16 memset(d,0,sizeof(d));
17 queue<int> q;
18 d[s]=1;
19 q.push(s);
20 while(!q.empty()){
21 int u=q.front();
22 q.pop();
23 for(int i=adj[u];~i;i=nex[i]){
24 int v=to[i];
25 if(!d[v]&&w[i]>flow[i]){
26 d[v]=d[u]+1;
27 q.push(v);
28 if(v==t) return 1;
29 }
30 }
31 }
32 return 0;
33 }
34 int dfs(int u,int fw){
35 if(u==t) return fw;
36 int rest=fw;
37 for(int i=adj[u];~i&&rest;i=nex[i]){
38 int v=to[i];
39 if(d[v]==d[u]+1&&w[i]>flow[i]){
40 int k=dfs(v,min(rest,w[i]-flow[i]));
41 if(!k) d[v]=0;
42 flow[i]+=k;
43 flow[i^1]-=k;
44 rest-=k;
45 }
46 }
47 return fw-rest;
48 }
49 int dinic(){
50 int maxflow=0;
51 while(bfs()){
52 //for(int i=1;i<=n;i++)
53 maxflow+=dfs(s,inf);
54 }
55 return maxflow;
56 }
57 signed main()
58 {
59 cin>>n>>m>>s>>t;
60 memset(adj,-1,sizeof(adj));
61 for(int i=1;i<=m;i++){
62 cin>>x>>y>>z;
63 add(x,y,z);add(y,x,0);
64 }
65 cout<<dinic();
66 return 0;
67 }

注意几个细节:adj初始化为-1,tot下标从0开始;~i

加上当前弧优化

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int maxn=5005;
const int inf=0x3f3f3f3f;
int tot,n,m,s,t,x,y,z,d[maxn],now[maxn];
int adj[maxn],nex[maxn<<1],to[maxn<<1],w[maxn<<1],flow[maxn<<1];
void add(int x,int y,int z){
nex[tot]=adj[x];
adj[x]=tot;
to[tot]=y;
w[tot]=z;
flow[tot++]=0;
}
bool bfs(){
memset(d,0,sizeof(d));
queue<int> q;
d[s]=1;
q.push(s);
for(int i=1;i<=n;i++)
now[i]=adj[i];
while(!q.empty()){
int u=q.front();
q.pop();
for(int i=adj[u];~i;i=nex[i]){
int v=to[i];
if(!d[v]&&w[i]>flow[i]){
d[v]=d[u]+1;
q.push(v);
if(v==t) return 1;
}
}
}
return 0;
}
int dfs(int u,int fw){
if(u==t) return fw;
int rest=fw;
for(int i=now[u];~i&&rest;i=nex[i]){
int v=to[i];
if(d[v]==d[u]+1&&w[i]>flow[i]){
int k=dfs(v,min(rest,w[i]-flow[i]));
if(!k) d[v]=0;
flow[i]+=k;
flow[i^1]-=k;
rest-=k;
}
}
return fw-rest;
}
int dinic(){
int maxflow=0;
while(bfs()){
//for(int i=1;i<=n;i++)
maxflow+=dfs(s,inf);
}
return maxflow;
}
signed main()
{
cin>>n>>m>>s>>t;
memset(adj,-1,sizeof(adj));
for(int i=1;i<=m;i++){
cin>>x>>y>>z;
add(x,y,z);add(y,x,0);
}
cout<<dinic();
return 0;
}

洛谷P3376 (最大流模板)的更多相关文章

  1. 洛谷 P3376 【【模板】网络最大流】

    题目描述 如题,给出一个网络图,以及其源点和汇点,求出其网络最大流. 输入 第一行包含四个正整数N.M.S.T,分别表示点的个数.有向边的个数.源点序号.汇点序号. 接下来M行每行包含三个正整数ui. ...

  2. 题解 洛谷 P3376 【【模板】网络最大流】

    本人很弱,只会Dinic.EK与Ford-Fulkerson...(正在学习ISAP...) 这里讲Dinic... Dinic:与Ford-Fulkerson和的思路相似(话说好像最大流求解都差不多 ...

  3. [洛谷P3376题解]网络流(最大流)的实现算法讲解与代码

    [洛谷P3376题解]网络流(最大流)的实现算法讲解与代码 更坏的阅读体验 定义 对于给定的一个网络,有向图中每个的边权表示可以通过的最大流量.假设出发点S水流无限大,求水流到终点T后的最大流量. 起 ...

  4. 【洛谷P3369】【模板】普通平衡树题解

    [洛谷P3369][模板]普通平衡树题解 题目链接 题意: 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作:1. 插入x数2. 删除x数(若有多个相同的数,因只删除一个)3 ...

  5. 洛谷P3376【模板】网络最大流 ISAP

    这篇博客写得非常好呀. 传送门 于是我是DCOI这一届第一个网络流写ISAP的人了,之后不用再被YKK她们嘲笑我用Dinic了!就是这样! 感觉ISAP是会比Dinic快,只分一次层,然后不能增广了再 ...

  6. bzoj 5120 无限之环 & 洛谷 P4003 —— 费用流(多路增广SPFA)

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=5120 https://www.luogu.org/problemnew/show/P4003 ...

  7. 【洛谷4721】【模板】分治FFT(CDQ分治_NTT)

    题目: 洛谷 4721 分析: 我觉得这个 "分治 FFT " 不能算一种特殊的 FFT ,只是 CDQ 分治里套了个用 FFT (或 NTT)计算的过程,二者是并列关系而不是偏正 ...

  8. 草地排水 洛谷P2740 最大流 入门题目

    草地排水 洛谷P2740 最大流入门题目 题意 在农夫约翰的农场上,每逢下雨,贝茜最喜欢的三叶草地就积聚了一潭水.这意味着草地被水淹没了,并且小草要继续生长还要花相当长一段时间.因此,农夫约翰修建了一 ...

  9. 【洛谷3865】 【模板】ST表(猫树)

    传送门 洛谷 Solution 实测跑的比ST表快!!! 这个东西也是\(O(1)\)的,不会可以看我上一篇Blog 代码实现 代码戳这里

  10. 【最大流ISAP】洛谷P3376模板题

    题目描述 如题,给出一个网络图,以及其源点和汇点,求出其网络最大流. 输入输出格式 输入格式: 第一行包含四个正整数N.M.S.T,分别表示点的个数.有向边的个数.源点序号.汇点序号. 接下来M行每行 ...

随机推荐

  1. uniapp调用jar

    前言 此方法为使用uniapp开发前端资源,然后继承进安卓原生项目,达到调用uniapp调用jar的效果. 基于Android Studio进行开发. 本人不懂安卓以及gradle,只是基于搜索引擎以 ...

  2. PHP几个工具函数

    移除XSS攻击脚本 function RemoveXSS($val) { // remove all non-printable characters. CR(0a) and LF(0b) and T ...

  3. linux学习随笔

    date +%Y-%m-%d\ %H:%M:%S cal 10 2009 yum install bc //计算器 bc 安装thefuck yum install gcc gcc++ python ...

  4. Java8新特性: lambda 表达式介绍

    一.lambda 表达式介绍 lambda 表达式是 Java 8 的一个新特性,可以取代大部分的匿名内部类,简化了匿名委托的使用,让你让代码更加简洁,优雅. 比较官方的定义是这样的: lambda ...

  5. 技术分享 | 简单测试MySQL 8.0.26 vs GreatSQL 8.0.25的MGR稳定性表现

    欢迎来到 GreatSQL社区分享的MySQL技术文章,如有疑问或想学习的内容,可以在下方评论区留言,看到后会进行解答 GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. M ...

  6. 羽夏看Linux内核——中断与分页相关入门知识

    写在前面   此系列是本人一个字一个字码出来的,包括示例和实验截图.如有好的建议,欢迎反馈.码字不易,如果本篇文章有帮助你的,如有闲钱,可以打赏支持我的创作.如想转载,请把我的转载信息附在文章后面,并 ...

  7. 不止跑路,拯救误操作rm -rf /*的小伙儿

    摘要:误执行了 rm -rf /* 之后,除了跑路还能怎么办? 本文分享自华为云社区<拯救被 rm -rf 伤到的小伙>,作者:Gauss 松鼠会. 灵魂画师再次上线   在开饭前我们先了 ...

  8. 部署前后端为独立的 Docker 节点

    在『服务器部署 Vue 和 Django 项目的全记录』一文中,介绍了在服务器中使用 Nginx 部署前后端项目的过程.然而,当 Web 应用流量增多时,需要考虑负载均衡.流量分发.容灾等情况,原生的 ...

  9. 《吐血整理》进阶系列教程-拿捏Fiddler抓包教程(14)-Fiddler断点(breakpoints)实战,篡改或伪造数据

    1.简介 上一篇主要就讲解和分享Fiddler断点的理论和操作,今天宏哥就用具体例子,将上一篇中的理论知识实践一下.而且在实际测试过程中,有时候需要修改请求或响应数据,或者直接模拟服务器响应,此时可以 ...

  10. Java精进-20分钟学会mybatis使用

    文字分享 希望现在的你无论有明确具体的目标还是没有,都能重视自己的需求和目标,并且常常回顾,或许可以找一个你习惯的方式写出来,挂在哪里,电脑或日记本都好.当你疲惫或迷茫的时候拿出来看一下,这在情怀领域 ...