[HDU1532]Drainage Ditches
最大流模板题
今天补最大流,先写道模板题,顺便写点对它的理解
最大流问题就是给一个幽香有向图,每一条边有容量,问若从$s$点放水,最多会有多少水流到$t$
为了解决整个问题,第一步我们当然要找到一条路径让它达到满流的状态,这里直接xjbdfs即可

比如我们找到一条路径$1\to2\to3\to4$,流量为$2$
但是我们有可能需要“反悔”,比如不走$2\to3$而走$2\to4$
这时我们可以使用一些小技巧:添加反向边并更新正向边的容量

以后如果我们走了反向边就相当于是在“反悔”
我们把上述找一条路径的过程称为“寻找增广路”
为了避免处理环等奇怪的情况,我们在每次找增广路之前先bfs一次记录每条边边权为$1$的最短路(其实是把图分层),然后按照距离$dis$dfs,即在$u$时下一步只访问$dis[v]=dis[u]+1$的点$v$
每次bfs完要一直找增广路直到找不到为止,若bfs不能到达$t$则证明没有增广路(已经满流了)
代码挺短的2333
#include<stdio.h>
#include<string.h>
#define inf 1000000000
struct edge{
int to,nex,cap;
}e[410];
int h[210],dis[210],q[40010],tot,n;
void add(int a,int b,int c){
tot++;
e[tot].to=b;
e[tot].cap=c;
e[tot].nex=h[a];
h[a]=tot;
}
bool bfs(){
int head=1,tail=1,s,i;
q[1]=1;
memset(dis,-1,sizeof(dis));
dis[1]=0;
while(head<=tail){
s=q[head];
head++;
for(i=h[s];i;i=e[i].nex){
if(dis[e[i].to]==-1&&e[i].cap>0){
dis[e[i].to]=dis[s]+1;
tail++;
q[tail]=e[i].to;
}
}
}
return dis[n]>0;
}
int min(int a,int b){return a<b?a:b;}
int dfs(int x,int flow){
if(x==n)return flow;
int i,f;
for(i=h[x];i;i=e[i].nex){
if(e[i].cap>0&&dis[e[i].to]==dis[x]+1){
f=dfs(e[i].to,min(flow,e[i].cap));
if(f){
e[i].cap-=f;
e[i^1].cap+=f;
return f;
}
}
}
return 0;
}
int main(){
int m,i,a,b,c,ans,tmp;
while(~scanf("%d%d",&m,&n)){
tot=1;
memset(h,0,sizeof(h));
for(i=1;i<=m;i++){
scanf("%d%d%d",&a,&b,&c);
add(a,b,c);
add(b,a,0);
}
ans=0;
while(bfs()){
while(tmp=dfs(1,inf))ans+=tmp;
}
printf("%d\n",ans);
}
}
[HDU1532]Drainage Ditches的更多相关文章
- HDU1532 Drainage Ditches 网络流EK算法
Drainage Ditches Problem Description Every time it rains on Farmer John's fields, a pond forms over ...
- hdu-----(1532)Drainage Ditches(最大流问题)
Drainage Ditches Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- HDU1532 Drainage Ditches 【最大流量】
Drainage Ditches Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- HDU1532 Drainage Ditches SAP+链式前向星
Drainage Ditches Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- POJ1273&&Hdu1532 Drainage Ditches(最大流dinic) 2017-02-11 16:28 54人阅读 评论(0) 收藏
Drainage Ditches Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- HDU-1532 Drainage Ditches,人生第一道网络流!
Drainage Ditches 自己拉的专题里面没有这题,网上找博客学习网络流的时候看到闯亮学长的博客然后看到这个网络流入门题!随手一敲WA了几发看讨论区才发现坑点! 本题采用的是Edmonds-K ...
- HDU1532 Drainage Ditches —— 最大流(sap算法)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1532 Drainage Ditches Time Limit: 2000/1000 MS (Java/ ...
- HDU-1532 Drainage Ditches (最大流,EK算法模板)
题目大意:最大流的模板题...源点是0,汇点是n-1. 代码如下: # include<iostream> # include<cstdio> # include<cma ...
- POJ 1273 Drainage Ditches题解——S.B.S.
Drainage Ditches Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 67823 Accepted: 2620 ...
随机推荐
- MySQL 表和库删不掉,并且表也打不开,不能导出的情况
linux上的mysql中,最近遇到表和库删不掉,并且表也打不开,不能导出的情况. 在删除数据库时,出现以下错误: ERROR 1010 (HY000): Error dropping databas ...
- Kaggle 数据挖掘比赛经验分享(转)
原作者:陈成龙 简介 Kaggle 于 2010 年创立,专注数据科学,机器学习竞赛的举办,是全球最大的数据科学社区和数据竞赛平台.笔者从 2013 年开始,陆续参加了多场 Kaggle上面举办的比 ...
- python基础===多线程
https://www.cnblogs.com/wj-1314/p/8263328.html threading 模块 先上代码: import time, threading def loop(): ...
- monkey测试===通过monkey测试检查app内存泄漏和cpu占用
最近一直在研究monkey测试.网上资料很多,但都是一个抄一个的.原创的很少 我把检查app内存泄漏的情况梳理一下: 参考资料: Monkey测试策略:https://testerhome.com/t ...
- 其实linux下远程windows并不麻烦
1:如果你是安装的ubuntu.那么安装完成之后就自带一个Remmina的远程桌面工具 2:这里我们需要安装rdesktop和tsclient,其中rdesktop是基于命令行的工具,tsclient ...
- linux下文件查询命令(cat,more,less,head,tail)
众所周知Linux中命令cat.more.less均可用来查看文件内容,主要区别有:cat是一次性显示整个文件的内容,还可以将多个文件连接起来显示,它常与重定向符号配合使用,适用于文件内容少的情况:m ...
- iOS---弹出提示对话框
一.就一个选项的对话框 代码块 #pragma mark - 封装弹出对话框方法 // 提示错误信息 - (void)showError:(NSString *)errorMsg { // 1.弹框提 ...
- 深入解析当下大热的前后端分离组件django-rest_framework系列四
查漏补缺系列 解析器 request类 django的request类和rest-framework的request类的源码解析 局部视图 from rest_framework.parsers im ...
- hdu 2955(概率转化,01背包)
Hot~~招聘——巴卡斯(杭州),壹晨仟阳(杭州),英雄互娱(杭州) (包括2016级新生)除了校赛,还有什么途径可以申请加入ACM校队? Robberies Time Limit: 2000/100 ...
- Nginx设置默认目录
server { listen ; server_name basic.com; index index.html index.htm index.php; root /www/wwwroot/bas ...