HDU 1532 Drainage Ditches(网络流模板题)
题目大意:就是由于下大雨的时候约翰的农场就会被雨水给淹没,无奈下约翰不得不修建水沟,而且是网络水沟,并且聪明的约翰还控制了水的流速,
本题就是让你求出最大流速,无疑要运用到求最大流了。题中m为水沟数,n为水沟的顶点,接下来Si,Ei,Ci分别是水沟的起点,终点以及其容量。求源点1到终点m的最大流速。
EK模板
#include<iostream>
#include<queue>
#include<cstring>
#include<algorithm>
using namespace std;
#define MaxInt 0x3f3f3f3f
using namespace std;
int m,n,f[210][210],cap[210][210],a[210],p[210];
queue<int> que;
int Edmond_Karp(int s,int t)
{
int flow=0;
while(1){//BFS找增广路
memset(a,0,sizeof(a));
a[s]=MaxInt;
que.push(s);
while(!que.empty()){
int u=que.front();
que.pop();
for(int v=1;v<=m;v++){//m为节点个数
if(!a[v]&&cap[u][v]>f[u][v]){
p[v]=u;//记录v的前驱
que.push(v);
a[v]=min(a[u],cap[u][v]-f[u][v]);//a[v]为s-v路径上的最小流量
}
}
}
if(a[t]==0) break;//找不到,则当前已是最大流量
for(int v=t;v!=s;v=p[v])//从汇点往回走
{
f[p[v]][v]+=a[t];//更新正向流量
f[v][p[v]]-=a[t];//更新反向流量
}
flow+=a[t];//更新从s流出的总流量
}
return flow;
}
int main()
{
int u,v,i,c,ans;
while(scanf("%d%d",&n,&m)!=EOF){
memset(cap,0,sizeof(cap));
memset(f,0,sizeof(f));
for(i=1;i<=n;i++){
scanf("%d%d%d",&u,&v,&c);
cap[u][v]+=c;//注意重边
}
ans=Edmond_Karp(1,m);
printf("%d\n",ans);
}
return 0;
}
Dinic模板
#include<cstdio>
#include<queue>
#include<cstring>
using namespace std;
#define inf 0x7fffffff
#define min(a,b) a<b?a:b
int n,m,u,v,w;
int level[];
struct Dinic
{
int cap;
int flow;
}edge[][];
//构造层次网络
bool Dinic_bfs(int s,int t)
{
queue<int> que;
memset(level,,sizeof(level));//初始化所有顶点的层次为 0
que.push(s);
level[s]=;
while(!que.empty()){
int u=que.front();
que.pop();
for(int v=;v<=m;v++){//即顶点v未被访问过,只考虑残量网络中顶点u,v是否存在边
if(!level[v]&&edge[u][v].flow<edge[u][v].cap){
level[v]=level[u]+;
que.push(v);
}
}
}
return level[t];
}
//u为当前节点,a为当前最小残量进行多路增广
int Dinic_dfs(int u,int a)
{
int flow=;
if(u==m||a==)
return a;
for(int v=;v<=m;v++){
if(level[u]+==level[v]){
if(edge[u][v].cap>edge[u][v].flow){
int r=Dinic_dfs(v,min(a,edge[u][v].cap-edge[u][v].flow));
edge[u][v].flow+=r;
edge[v][u].flow-=r;
a-=r,flow+=r;
}
}
}
return flow;
}
//求出最大流
int Dinic()
{
int flow=;
while(Dinic_bfs(,m))
flow+=Dinic_dfs(,inf);
return flow;
}
int main()
{
while(scanf("%d%d",&n,&m)!=EOF){
memset(edge,,sizeof(edge));
for(int i=;i<=n;i++){
scanf("%d%d%d",&u,&v,&w);
edge[u][v].cap+=w;//防止重边
}
printf("%d\n",Dinic());
}
return ;
}
HDU 1532 Drainage Ditches(网络流模板题)的更多相关文章
- POJ 1273:Drainage Ditches 网络流模板题
Drainage Ditches Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 63339 Accepted: 2443 ...
- USACO 4.2 Drainage Ditches(网络流模板题)
Drainage DitchesHal Burch Every time it rains on Farmer John's fields, a pond forms over Bessie's fa ...
- hdu 1532 Drainage Ditches(网络流)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1532 题目大意是:农夫约翰要把多个小池塘的水通过池塘间连接的水渠排出去,从池塘1到池塘M最多可以排多少 ...
- hdu 1532 Drainage Ditches(最大流模板题)
Drainage Ditches Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- HDU 1532 Drainage Ditches (网络流)
A - Drainage Ditches Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64 ...
- HDU 1532 Drainage Ditches (最大网络流)
Drainage Ditches Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other) To ...
- HDU 1532 Drainage Ditches(最大流 EK算法)
题目网址:http://acm.hdu.edu.cn/showproblem.php?pid=1532 思路: 网络流最大流的入门题,直接套模板即可~ 注意坑点是:有重边!!读数据的时候要用“+=”替 ...
- HDU 1532 Drainage Ditches 分类: Brush Mode 2014-07-31 10:38 82人阅读 评论(0) 收藏
Drainage Ditches Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- poj 1273 && hdu 1532 Drainage Ditches (网络最大流)
Drainage Ditches Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 53640 Accepted: 2044 ...
随机推荐
- git 使用手册
git 作为开源项目首选版本管理软件,必然其优势不容小觑,下面总结一下初次解除用到的一些技能 1. 基本命令介绍 git help branch 查看branch帮助文档 git branch -a ...
- Unknown SSL protocol error in connection to xxx:443
使用git从远程下载时,出现Unknown SSL protocol error in connection to xxx:443 错误. 很有可能是被墙在了外面,这里针对墙在外面的情况. 设置代理服 ...
- LAMP环境搭建博客
背景: 公司要用到lamp环境,让我装,我就开始着手找资料,一般分为源码装和yum装,源码装很容易出错,所以我选择了yum装,. 服务器:aliyun服务器 centos6.8系统 按照第一个安装完 ...
- Laravel5.1 搭建博客 --构建标签
博客的每篇文章都是需要有标签的,它与文章也是多对多的关系 这篇笔记也是记录了实现标签的步骤逻辑. 在我们之前的笔记中创建了Tag的控制器和路由了 所以这篇笔记不在重复 1 创建模型与迁移文件 迁移文件 ...
- -pie can only be used when targeting iOS 4.2 or later
网上下载的demo,执行报错-pie can only be used when targeting iOS 4.2 or later 解决的方法:选择target==>改动developmen ...
- tomcat 权限问题
http://blog.csdn.net/testcs_dn/article/details/39252433 chmod -R 755 apache-tomcat-7.0.63 pwd :mac 看 ...
- ios常用第三方库git下载地址
本文转载至 http://blog.csdn.net/cerastes/article/details/38348599 iOS第三方库下载常用git 1.FMDB https://github.co ...
- IOS实现打电话后回调
本文转载至 http://blog.csdn.net/cerastes/article/details/38340687 UIWebView *callWebview =[[UIWebView a ...
- BaseAdapter<T> 重写 createViewFromResource实现界面,刷新,加载,移除
import java.util.ArrayList; import java.util.List; import android.content.Context; import android.vi ...
- Django学习笔记第八篇--实战练习四--为你的视图函数自定义装饰器
零.背景: 对于登录后面所有视图函数,都需要验证登录信息,一般而言就是验证cookie里面的一些信息.所以你可以这么写函数: def personinfo(request): ": retu ...