图论算法-网络最大流【EK;Dinic】
图论算法-网络最大流模板【EK;Dinic】
EK模板
每次找出增广后残量网络中的最小残量增加流量
const int inf=1e9;
int n,m,s,t;
struct node{int v,cap;};
vector<node> map[100010];
int flow[10010][10010];
int a[100010];
int pre[100010];
int EK()
{
int maxf;//记录最大流量
queue<int> q;
while(1)
{
memset(a,0,sizeof(a));
a[s]=inf;
q.push(s);
while(!q.empty())
{
int u=q.front();
q.pop();
for(int j=0;j<map[u].size();j++)
{
int v=map[u][j].v;
int cap=map[u][j].cap;
if(!a[v]&&cap>flow[u][v])
{
pre[v]=u;
q.push(v);
a[v]=min(a[u],cap-flow[u][v]);
}
}
}
if(a[t]==0)
break;
for(int u=t;u!=s;u=pre[u])
{
flow[ pre[u] ][u]+=a[t];
flow[ u][ pre[u] ]-=a[t];
}
maxf+=a[t];
}
return maxf;
}
int main()
{
cin>>n>>m>>s>>t;
for(int i=1;i<=m;i++)
{
int u,v,dis;
cin>>u>>v>>dis;
map[u].push_back((node) {v,dis });
map[v].push_back((node) {u,0 });//**高亮**反向边一定要记得建
}
int ans=EK();
cout<<ans;
return 0;
}
Dinic模板
构造层次+阻塞流增广
const int inf=1e9;
int n,m;
int s,t;
int tot=1;
struct node{int v,f,nxt;}E[1000010];
int head[100010];
int lev[100010];//记录层次
void add(int u,int v,int cap)
{
E[++tot].v=v;
E[tot].nxt=head[u];
E[tot].f=cap;
head[u]=tot;
}
bool bfs()
{
queue<int> q;
memset(lev,-1,sizeof(lev));
q.push(s);
lev[s]=0;
while(!q.empty())
{
int u=q.front();
q.pop();
for(int i=head[u];i;i=E[i].nxt)
{
int v=E[i].v;
if(lev[v]==-1&&E[i].f)
{
lev[v]=lev[u]+1;
if(v==t)
return true;
q.push(v);
}
}
}
return false;
}
int dfs(int u,int cap)
{
if(u==t)
return cap;
int flow=cap;
for(int i=head[u];i;i=E[i].nxt)
{
int v=E[i].v;
if(lev[v]==lev[u]+1&&flow&&E[i].f>0)
{
int f=dfs(v,min(flow,E[i].f));
flow-=f;
E[i].f-=f;
E[i^1].f+=f;
}
}
return cap-flow;
}
int dinic()
{
int maxf=0;
while(bfs())//若s-t可达就不断构造层次图
maxf+=dfs(s,inf);//s-t可达,用阻塞流增广
return maxf;
}
int main()
{
cin>>n>>m>>s>>t;
for(int i=1;i<=m;i++)
{
int u,v,w;
cin>>u>>v>>w;
add(u,v,w);
add(v,u,0);//**高亮**反向边一定要记得建
}
dinic();
cout<<maxf;
return 0;
}
图论算法-网络最大流【EK;Dinic】的更多相关文章
- 网络最大流(EK)
以前在oi中见到网络流的题都是直接跳过,由于本蒟蒻的理解能力太弱,导致网络流的学习不断推迟甚至被安排在了tarjan之后,原本计划于学习完最短路后就来学网络流的想法也随之破灭,在看完众多大佬 的博客后 ...
- POJ 1459 Power Network(网络最大流,dinic算法模板题)
题意:给出n,np,nc,m,n为节点数,np为发电站数,nc为用电厂数,m为边的个数. 接下来给出m个数据(u,v)z,表示w(u,v)允许传输的最大电力为z:np个数据(u)z,表示发电 ...
- poj1459 Power Network --- 最大流 EK/dinic
求从电站->调度站->消费者的最大流,给出一些边上的容量.和电站和消费者能够输入和输出的最大量. 加入一个超级源点和汇点,建边跑模板就能够了. 两个模板逗能够. #include < ...
- Ural1109_Conference(二分图最大匹配/匈牙利算法/网络最大流)
解题报告 二分图第一题. 题目描写叙述: 为了參加即将召开的会议,A国派出M位代表,B国派出N位代表,(N,M<=1000) 会议召开前,选出K队代表,每对代表必须一个是A国的,一个是B国的; ...
- 洛谷P3376【模板】网络最大流 Dinic模板
之前的Dinic模板照着刘汝佳写的vector然后十分鬼畜跑得奇慢无比,虽然别人这样写也没慢多少但是自己的就是令人捉急. 改成邻接表之后快了三倍,虽然还是比较慢但是自己比较满意了.虽然一开始ecnt从 ...
- 图论算法-最小费用最大流模板【EK;Dinic】
图论算法-最小费用最大流模板[EK;Dinic] EK模板 const int inf=1000000000; int n,m,s,t; struct node{int v,w,c;}; vector ...
- 网络最大流算法—Dinic算法及优化
前置知识 网络最大流入门 前言 Dinic在信息学奥赛中是一种最常用的求网络最大流的算法. 它凭借着思路直观,代码难度小,性能优越等优势,深受广大oier青睐 思想 $Dinic$算法属于增广路算法. ...
- 最大流EK和Dinic算法
最大流EK和Dinic算法 EK算法 最朴素的求最大流的算法. 做法:不停的寻找增广路,直到找不到为止 代码如下: @Frosero #include <cstdio> #include ...
- 算法模板——Dinic网络最大流 2
实现功能:同Dinic网络最大流 1 这个新的想法源于Dinic费用流算法... 在费用流算法里面,每次处理一条最短路,是通过spfa的过程中就记录下来,然后顺藤摸瓜处理一路 于是在这个里面我的最大流 ...
随机推荐
- dede添加会员功能听语音
http://jingyan.baidu.com/article/363872ec36d33f6e4ba16fb7.html 其实 dede里面的 会员功能就是圈子模版啦 圈子 安装了 基本上有 1, ...
- destoon 默认广告位代码
<img src="http://www.testinstrument.cn/skin/default/jiurong/img/banner.png" alt="& ...
- windows下搭建virtualenv虚拟环境
操作系统:windows7 旗舰版 64bit pip install django==1.9.1pip install virtualenv 虚拟环境工具>pip install virtua ...
- Effective Java 第三版——29. 优先考虑泛型
Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将 ...
- centos如何安装python库?
通过yum install安装,先解决yum不能安装python库的问题 yum install -y epel-release #先安装epel源,参考http://sharadchhetri. ...
- Tomcat--startup.bat文件
Tomcat--startup.bat文件 如何启动tomcat,如何关闭tomcat等常规操作,我们应该都很清楚了,但是实际中我们经常会遇到一些恶心的情景,比如说正在我们撸码撸的很高兴的时候,ecl ...
- CSS--开篇
1,什么是CSS? 层叠样式表(Cascading Style Sheet ),定义了如何显示HTML元素,用来控制网页的样式和布局. 引入CSS后:HTML标记专门用于定义网页的内容,而使用CSS来 ...
- UTF8编码
UTF-8是Unicode的实现方式之一. UTF-8最大的一个特点,就是它是一种变长的编码方式.它可以使用1~4个字节表示一个符号,根据不同的符号而变化字节长度. UTF-8的编码规则很简单,只有二 ...
- Mybatis (一)
1 DAO层框架 框架:是一种整体的解决方案. 1.1 JDBC的步骤 1.2 Hibernate执行的步骤 1.3 MyBaits 2 Mybatis简介 Mybatis是支持定制化SQL.存储过程 ...
- python --- 基础多线程编程
在python中进行多线程编程之前必须了解的问题: 1. 什么是线程? 答:线程是程序中一个单一的顺序控制流程.进程内一个相对独立的.可调度的执行单元,是系统独立调度和分派CPU的基本单位指运行中的程 ...