USACO 4.2 Drainage Ditches(网络流模板题)
Drainage Ditches
Hal Burch
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. Note however, that there can be more than one ditch between two intersections.
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.
PROGRAM NAME: ditch
INPUT FORMAT
| Line 1: | 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. |
| Line 2..N+1: | Each of 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. |
SAMPLE INPUT (file ditch.in)
5 4
1 2 40
1 4 20
2 4 20
2 3 30
3 4 10
OUTPUT FORMAT
One line with a single integer, the maximum rate at which water may emptied from the pond.
SAMPLE OUTPUT (file ditch.out)
50
————————————————————————————————————————————————
它有个俗名叫草地排水
/*
ID:ivorysi
PROG:ditch
LANG:C++
*/
#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
#include <set>
#include <vector>
#define inf 0x7fffffff
#define ivorysi
#define siji(i,x,y) for(int i=x;i<=y;++i)
#define gongzi(j,x,y) for(int j=x;j>=y;--j)
#define xiaosiji(i,x,y) for(int i=x;i<y;++i)
#define sigongzi(j,x,y) for(int j=x;j>y;--j)
using namespace std;
struct node {
int to,next,val;
}edge[];
int head[],sum=;
void add(int u,int v,int c) {
edge[++sum].to=v;
edge[sum].next=head[u];
edge[sum].val=c;
head[u]=sum;
}
void AddTwoWays(int u,int v,int c) {
add(u,v,c);
add(v,u,);//反向边
}
int n,m,dis[],gap[],ans;
int sap(int u,int aug){//O(玄学)
if(u==m) return aug;
int dmin=m-,flow=,v,t; for(int i=head[u];i;i=edge[i].next) {
v=edge[i].to;
if(edge[i].val>) {//只有还能流动的地方才能分层
if(dis[u]==dis[v]+) {
t=sap(v,min(aug-flow,edge[i].val));//限制流量不超过该点流量和边的限制
edge[i].val-=t;
edge[i^].val+=t;
flow+=t;
if(aug==flow) return flow;//流尽
if(dis[]>=m) return flow;//搜索已在某处达到结束条件
}
dmin=min(dmin,dis[v]);
}
}
if(!flow) {
--gap[dis[u]];
if(gap[dis[u]]==) dis[]=m;//出现断层说明无法再流
dis[u]=dmin+;//分层
++gap[dis[u]];
}
return flow;
}
int main(int argc, char const *argv[])
{
#ifdef ivorysi
freopen("ditch.in","r",stdin);
freopen("ditch.out","w",stdout);
#else
freopen("f1.in","r",stdin);
#endif
scanf("%d%d",&n,&m);
int u,v,c;
siji(i,,n) {
scanf("%d%d%d",&u,&v,&c);
AddTwoWays(u,v,c);
}
while(dis[]<m) {ans+=sap(,inf);}
printf("%d\n",ans);
return ;
}
USACO 4.2 Drainage Ditches(网络流模板题)的更多相关文章
- POJ 1273:Drainage Ditches 网络流模板题
Drainage Ditches Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 63339 Accepted: 2443 ...
- HDU 1532 Drainage Ditches(网络流模板题)
题目大意:就是由于下大雨的时候约翰的农场就会被雨水给淹没,无奈下约翰不得不修建水沟,而且是网络水沟,并且聪明的约翰还控制了水的流速, 本题就是让你求出最大流速,无疑要运用到求最大流了.题中m为水沟数, ...
- Drainage Ditches~网络流模板
Description Every time it rains on Farmer John's fields, a pond forms over Bessie's favorite clover ...
- poj 1273 Drainage Ditches (网络流 最大流)
网络流模板题. ============================================================================================ ...
- POJ 1273 Drainage Ditches (网络流Dinic模板)
Description Every time it rains on Farmer John's fields, a pond forms over Bessie's favorite clover ...
- NYOJ 323 Drainage Ditches 网络流 FF 练手
Drainage Ditches 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 Every time it rains on Farmer John's fields, ...
- Drainage Ditches--hdu1532(网络流 模板)
http://acm.hdu.edu.cn/showproblem.php?pid=1532 Drainage Ditches Time Limit: 2000/1000 MS (Java/Other ...
- [POJ1273][USACO4.2]Drainage Ditches (网络流最大流)
题意 网络流最大流模板 思路 EK也不会超时 所以说是一个数据比较水的模板题 但是POJ有点坑,多组数据,而且题目没给 哭得我AC率直掉 代码 用的朴素Dinic #include<cstdio ...
- HDU1532 Drainage Ditches 网络流EK算法
Drainage Ditches Problem Description Every time it rains on Farmer John's fields, a pond forms over ...
随机推荐
- Date的使用
方法 说明 Date() 返回当日的日期和时间 getDate() 获取当天(1-31) getDay() 获取当天的星期(0-6) getMonth() 获取月份(0-11) getFullYear ...
- MVC使用RDL报表
MVC使用RDL报表 这次我们来演示MVC3怎么显示RDL报表,坑爹的微软把MVC升级到5都木有良好的支持报表,让MVC在某些领域趋于短板 我们只能通过一些方式来使用rdl报表. Razor视图不支持 ...
- SQL计算年代差
1.用datediff函数 select datediff(yyyy,StuBirthday,getdate())>17 2.用year函数 select (year(getdate()-yea ...
- strlen与sizeof有什么区别?
其实二者的区别还是很大的,首先strlen计算的长度不包括字符串最后的终止null字节, 而sizeof则计算包括终止null的缓冲区长度.还有一点很容易被忽略,strlen需要一次函数调用, 即它是 ...
- Binder机制,从Java到C (9. IPC通信过程)
1.一次IPC通信過程的幾個步驟 一次通信过程简单的说有下面5个步骤,第一眼看上去,肯定不知道什么玩意,多看几遍,慢慢看,其实是能理解的. 1. Client将数据封装成Parcel. (前面已经讲过 ...
- c++class 内存布局
#include <iostream> using namespace std; class base1 { int a; double b; char c; }; int main() ...
- [转]Hacking the iOS Spotlight
原文:http://theiostream.tumblr.com/post/36905860826/hacking-the-ios-spotlight 原文:http://theiostream.tu ...
- memcache总结
1简介: Memcache(内存缓存) 是一个高性能的分布式的内存对象缓存系统.通过在内存里维护一个巨大的hash表. 其实简单说点就是一个软件,可以用来维护内存,将数据在内存中使用,减少I/O 2工 ...
- 记录Spring.net学习中遇到的各种问题
1.由于项目中使用了spring.net作为IOC容器,所以看了下相应的博客,熟悉一下这方面的内容,参照博客为博客园刘冬的博客系列: 博客地址:http://www.cnblogs.com/GoodH ...
- js中的AMD规范
回首萧瑟,残月挂角,孤草弄影. 看了一下上一篇随笔的日期,距离上一篇日志又过去了许久.在这段时间中,我尽全力去拯救那间便利店,可惜到最后依然失败,这一次是所有的出路全部没有了,我也做了所有的努力.闲下 ...