2018.07.06 POJ1273 Drainage Ditches(最大流)
Drainage Ditches
Time Limit: 1000MS Memory Limit: 10000K
Description
Every time it rains on Farmer John’s fields, a pond forms over Bessie’s favorite clover patch. This means that the clover is covered by water for awhile and takes quite a long time to regrow. Thus, Farmer John has built a set of drainage ditches so that Bessie’s clover patch is never covered in water. Instead, the water is drained to a nearby stream. Being an ace engineer, Farmer John has also installed regulators at the beginning of each ditch, so he can control at what rate water flows into that ditch.
Farmer John knows not only how many gallons of water each ditch can transport per minute but also the exact layout of the ditches, which feed out of the pond and into each other and stream in a potentially complex network.
Given all this information, determine the maximum rate at which water can be transported out of the pond and into the stream. For any given ditch, water flows in only one direction, but there might be a way that water can flow in a circle.
Input
The input includes several cases. For each case, the first line contains two space-separated integers, N (0 <= N <= 200) and M (2 <= M <= 200). N is the number of ditches that Farmer John has dug. M is the number of intersections points for those ditches. Intersection 1 is the pond. Intersection point M is the stream. Each of the following N lines contains three integers, Si, Ei, and Ci. Si and Ei (1 <= Si, Ei <= M) designate the intersections between which this ditch flows. Water will flow through this ditch from Si to Ei. Ci (0 <= Ci <= 10,000,000) is the maximum rate at which water will flow through the ditch.
Output
For each case, output a single integer, the maximum rate at which water may emptied from the pond.
Sample Input
5 4
1 2 40
1 4 20
2 4 20
2 3 30
3 4 10
Sample Output
50
Source
USACO 93
一道最大流的板子题,感觉也没什么好说的,建图也比较easy" role="presentation" style="position: relative;">easyeasy,直接套个dinic" role="presentation" style="position: relative;">dinicdinic就行了。
代码如下:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#include<algorithm>
#define oo 0x3f3f3f3f
#define N 10005
using namespace std;
struct Node{
int v,next,c;
}e[N<<1];
int tot=1,n,m,d[N],first[N];
inline void add(int u,int v,int c){
e[++tot].v=v;
e[tot].next=first[u];
e[tot].c=c;
first[u]=tot;
}
inline long long read(){
long long ans=0;
char ch=getchar();
while(!isdigit(ch))ch=getchar();
while(isdigit(ch)){
ans=(ans<<3)+(ans<<1)+ch-'0';
ch=getchar();
}
return ans;
}
inline int max(int a,int b){return a>b?a:b;}
inline bool bfs(){
queue<int>q;
q.push(1);
memset(d,-1,sizeof(d));
d[1]=0;
while(!q.empty()){
int x=q.front();
q.pop();
for(int i=first[x];i!=-1;i=e[i].next){
if(d[e[i].v]==-1&&e[i].c){
d[e[i].v]=d[x]+1;
if(e[i].v==m)return true;
q.push(e[i].v);
}
}
}
return false;
}
inline int dfs(int p,int f){
if(p==m)return f;
int cnt=f;
for(int i=first[p];i!=-1;i=e[i].next){
int v=e[i].v;
if(d[v]==d[p]+1&&e[i].c>0&&cnt){
int maxn=dfs(v,min(cnt,e[i].c));
if(maxn==0)d[v]=-1;
cnt-=maxn;
e[i].c-=maxn;
e[i^1].c+=maxn;
}
}
return f-cnt;
}
int main(){
while(scanf("%d%d",&n,&m)!=EOF){
tot=1;
memset(first,-1,sizeof(first));
for(int i=1;i<=n;++i){
int u=read(),v=read(),w=read();
add(u,v,w);
add(v,u,0);
}
int ans=0;
while(bfs())ans+=dfs(1,oo);
printf("%d\n",ans);
}
return 0;
}
2018.07.06 POJ1273 Drainage Ditches(最大流)的更多相关文章
- poj-1273 Drainage Ditches(最大流基础题)
题目链接: Drainage Ditches Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 67475 Accepted ...
- POJ-1273 Drainage Ditches 最大流Dinic
Drainage Ditches Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 65146 Accepted: 25112 De ...
- POJ1273:Drainage Ditches(最大流入门 EK,dinic算法)
http://poj.org/problem?id=1273 Description Every time it rains on Farmer John's fields, a pond forms ...
- poj1273 Drainage Ditches (最大流板子
网络流一直没学,来学一波网络流. https://vjudge.net/problem/POJ-1273 题意:给定点数,边数,源点,汇点,每条边容量,求最大流. 解法:EK或dinic. EK:每次 ...
- [poj1273]Drainage Ditches(最大流)
解题关键:最大流裸题 #include<cstdio> #include<cstring> #include<algorithm> #include<cstd ...
- poj1273 Drainage Ditches Dinic最大流
Drainage Ditches Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 76000 Accepted: 2953 ...
- Poj 1273 Drainage Ditches(最大流 Edmonds-Karp )
题目链接:poj1273 Drainage Ditches 呜呜,今天自学网络流,看了EK算法,学的晕晕的,留个简单模板题来作纪念... #include<cstdio> #include ...
- poj1273 Drainage Ditches
Drainage Ditches Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 68414 Accepted: 2648 ...
- poj 1273 Drainage Ditches 最大流入门题
题目链接:http://poj.org/problem?id=1273 Every time it rains on Farmer John's fields, a pond forms over B ...
随机推荐
- starling 第一天
flashplayer_27_sa_debug: https://files.cnblogs.com/files/dt1991/flashplayer_27_sa_debug.rar flashpla ...
- cv::circle《转》
void circle(CV_IN_OUT Mat& img, Point center, int radius, const Scalar& color, int thickness ...
- Apache kafka v1.0.0 部署文档
简介: Apache Kafka 是一个 Scala 语言编写的可扩展.分布式.高性能的容错消息发布.订阅系统. 官网地址:http://kafka.apache.org 中文教程:http://ww ...
- 利用 setInterval 确定用户的动作是否停止
最近遇到一个问题,对于某一个持续的动作,希望能够知晓用户何时停止这个动作, 比如说 我们通过注册onresize事件,去监听浏览器窗口变化的事件,在这个事件里面,我们可能要执行大量的计算去确定窗口变化 ...
- EL表达式获取请求
1EL 表达式语法: ${ EL 表达式} 它的特点: 1自动转换类型, 2使用简单. 2 EL表达式具有类型无关性,可以使用“.”或者“[]”操作符在相应的作用域(page , requ ...
- sql语句执行的时间
统计mysql里每条SQL语句执行的时间 收藏 CrazyHarry 发表于 2年前 阅读 3785 收藏 8 点赞 3 评论 3 Google.Github 双重认证前端课程,独家硅谷内容,每周直播 ...
- zabbix3.2的server和zabbix-agent2.2怎么监控MySQL的办法
zabbix官方支持监控MySQL,但直接使用默认的模板是不可用的,还需要经过额外的设置才可以使用.如果只需要对mysql数据库做简单的监控,zabbix自带的模板完全能够满足要求:如果有更高的需求那 ...
- centos7 升级python2.7 到python3.6(Centos7 安装Anaconda)
Anaconda 下载 https://www.anaconda.com/download/#linux 下载文件 Anaconda3-5.2.0-Linux-x86_64.sh bash Anaco ...
- MySQL语句相关
一.增加 1.基本 2.集合 3.组合 二.删除 1.基本 2.集合 3.组合 1.一个表的查询结果作为另一个表的插入字段之一 <insert id="方法" paramet ...
- angluarjs ng-repeat 行号
参考 https://zhidao.baidu.com/question/1882914672116911828.html $index