Luogu 3376 【模板】网络最大流
0.网络流解释:如果你还是不能理解,我们就换一种说法,假设s城有inf个人想去t城,但是从s到t要经过一些城市才能到达,(以上图为例)其中s到3城的火车票还剩10张,3到t的火车票还剩15张,其他路以此类推,问最终最多能有多少人能到达t城?(假设这个地区只有火车,没有汽车飞机,步行和骑自行车会累死就不考虑了,再假设所有人都买得起火车票。)
1.https://www.cnblogs.com/zsboy/archive/2013/01/27/2878810.html EK 算法 ,但是“反悔”那个图应该9 1 9 1 9 。
2. Dinic算法可以每次找出多条增广路,为什么要分层呢?分层图是有向无环图。

每bfs一次的结果在运行框中。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<cstdlib>
#include<algorithm>
#include<queue>
#define inf 0x3f3f3f3f
using namespace std;
int hd[10005],cnt=-1,d[10005],vis[10005],cur[10005];
struct Edge{
int to,vl,nxt;
}edge[200005];
void add(int u,int v,int w)
{
cnt++;
edge[cnt].to =v;
edge[cnt].nxt=hd[u];
edge[cnt].vl=w;
hd[u]=cnt;
}
queue<int> q;
int s,t;
int bfs()
{
memset(d,0,sizeof d);
memset(vis,0,sizeof vis);
while(q.size()) q.pop() ;//这个不写会T
d[s]=1;vis[s]=1;
q.push(s);
while(!q.empty())
{
int u=q.front();
q.pop();
for(int i=hd[u];i!=-1;i=edge[i].nxt)//边是从零开始的,因此这里可以不能是i>0 //同一条边还有容量可以流怎么办,边已经遍历完
{
int v=edge[i].to;
if(!vis[v] && edge[i].vl>0)
{
vis[v]=1;
d[v]=d[u]+1;
q.push(v);
if(v==t)return 1;
}
}
}
return 0;
} int dinic(int u,int res)//
{
if(u==t) return res;
int sum=0;
for(int i=cur[u];i!=-1;i=edge[i].nxt)
{
cur[u]=i;//当前弧优化,不符合的通道就不再判断了
int v=edge[i].to;
if(d[u]+1==d[v] && edge[i].vl>0 && res>0)//
{
int k=dinic(v,min(res,edge[i].vl)); //剩余流量及该路径容量的最小值
if(!k)
{
d[v]=0;//去掉增广完的点
break;
}
edge[i].vl-=k;
edge[i^1].vl+=k;
res-=k;
sum+=k;
}
}
return sum;
}
int n,m,u,v,w,flow,mxflow;
int main()
{
scanf("%d%d%d%d",&n,&m,&s,&t);
memset(hd,-1,sizeof hd);
for(int i=1;i<=m;i++)
{
scanf("%d%d%d",&u,&v,&w);
add(u,v,w);
add(v,u,0);
}
// for(int i=1;i<=n;i++)
// cout<<d[i]<<" ";
// cout<<endl;
while(bfs()){
while(flow=dinic(s,inf))
mxflow+=flow;
}
cout<<mxflow<<endl;
}
Luogu 3376 【模板】网络最大流的更多相关文章
- 【洛谷 p3376】模板-网络最大流(图论)
题目:给出一个网络图,以及其源点和汇点,求出其网络最大流. 解法:网络流Dinic算法. 1 #include<cstdio> 2 #include<cstdlib> 3 #i ...
- 【Luogu】P3376网络最大流模板(Dinic)
最大流模板成为另一个被攻克的模板题. 今天QDC给我讲了一下Dinic,感觉很好懂.于是为了巩固就把这道题A掉了. 核心思想就是不断BFS分层,然后不断DFS找增广路.找不到之后就可以把答案累加输出了 ...
- luogu 3376 最小费用最大流 模板
类似EK算法,只是将bfs改成spfa,求最小花费. 为什么可以呢,加入1-3-7是一条路,求出一个流量为40,那么40*f[1]+40*f[2]+40*f[3],f[1]是第一条路的单位费用,f[2 ...
- 【Luogu P3376】网络最大流
Luogu P3376 最大流是网络流模型的一个基础问题. 网络流模型就是一种特殊的有向图. 概念: 源点:提供流的节点(入度为0),类比成为一个无限放水的水厂 汇点:接受流的节点(出度为0),类比成 ...
- [模板]网络最大流 & 最小费用最大流
我的作业部落有学习资料 可学的知识点 Dinic 模板 #define rg register #define _ 10001 #define INF 2147483647 #define min(x ...
- P3376 [模板] 网络最大流
https://www.luogu.org/blog/ONE-PIECE/wang-lao-liu-jiang-xie-zhi-dinic EK 292ms #include <bits/std ...
- P3376 【模板】网络最大流(luogu)
P3376 [模板]网络最大流(luogu) 最大流的dinic算法模板(采取了多种优化) 优化 时间 inline+当前弧+炸点+多路增广 174ms no 当前弧 175ms no 炸点 249 ...
- Dinic最大流 || Luogu P3376 【模板】网络最大流
题面:[模板]网络最大流 代码: #include<cstring> #include<cstdio> #include<iostream> #define min ...
- luogu P3376 【模板】网络最大流(no)ek
题目描述 如题,给出一个网络图,以及其源点和汇点,求出其网络最大流. 输入输出格式 输入格式: 第一行包含四个正整数N.M.S.T,分别表示点的个数.有向边的个数.源点序号.汇点序号. 接下来M行每行 ...
- 『题解』洛谷P3376 【模板】网络最大流
Problem Portal Portal1:Luogu Description 如题,给出一个网络图,以及其源点和汇点,求出其网络最大流. Input 第一行包含四个正整数\(N,M,S,T\),分 ...
随机推荐
- HM16.0之帧内模式——xCheckRDCostIntra()函数
参考:https://blog.csdn.net/nb_vol_1/article/category/6179825/1? 1.源代码: Void TEncCu::xCheckRDCostIntra( ...
- 如何使用SPSSAU计算耦合协调度?
什么是耦合协调度模型 耦合协调度模型用于分析事物的协调发展水平.耦合度指两个或两个以上系统之间的相互作用影响,实现协调发展的动态关联关系,可以反映系统之间的相互依赖相互制约程度.协调度指耦合相互作用关 ...
- 高并发&性能优化(一)------总体介绍
[开篇词] 本文主要通过一些经典的高并发场景,以及一些基本的运维工具来讲述一些关于高并发以及性能优化相关的内容,主要包括性能瓶颈的定位,性能调优的思路和技巧等. [性能的衡量指标] ?什么是性能 性能 ...
- DAO层,Service层,Controller层、View层、entity层
1.DAO(mapper)层:DAO层主要是做数据持久层的工作,负责与数据库进行联络的一些任务都封装在此,DAO层的设计首先是设计DAO的接口,然后在Spring的配置文件中定义此接口的实现类,然后就 ...
- 淘宝ios端弹窗-2020年3月25日
- Kafka Broker源码:网络层设计
一.整体架构 1.1 核心逻辑 1个Acceptor线程+N个Processor线程(network.threads)+M个Request Handle线程(io threads) 多线程多React ...
- 启用和禁用warning
#pragma warning 启用和禁用warning https://www.cnblogs.com/Free-Thinker/p/5897678.html
- Unity2018.4.7导出Xcode工程报错解决方案
1. unity导出xcode工程有两种模式,一种为模拟器运行的工程,一种为真机运行的工程,这里遇到的错误,都是导出模拟器运行工程时报的错误. 错误1: unity UnityMetalSupport ...
- java初探(1)之登录补充
在登录之后,可能服务器是分布式的,因此不能通过一个本地的session来管理登录信息,导致登录的信息不能传递,即在这台服务器上可以得到用户登录信息,但在那台就得不到.因此,需要设置分布式的sessio ...
- MyBatis开发重点知识
1.1为什么需要ORM框架? 传统的JDBC编程存在的弊端: ü 工作量大,操作数据库至少要5步: ü 业务代码和技术代码耦合: ü 连接资源手动关闭,带来了隐患: MyBatis前身是iBatis, ...