【Codevs1993】草地排水(最大流,Dinic)
2024-09-08 01:57:36
题意:在农夫约翰的农场上,每逢下雨,Bessie最喜欢的三叶草地就积聚了一潭水。这意味着草地被水淹没了,并且小草要继续生长还要花相当长一段时间。因此,农夫约翰修建了一套排水系统来使贝茜的草地免除被大水淹没的烦恼(不用担心,雨水会流向附近的一条小溪)。作为一名一流的技师,农夫约翰已经在每条排水沟的一端安上了控制器,这样他可以控制流入排水沟的水流量。
农夫约翰知道每一条排水沟每分钟可以流过的水量,和排水系统的准确布局(起点为水潭而终点为小溪的一张网)。需要注意的是,有些时候从一处到另一处不只有一条排水沟。
根据这些信息,计算从水潭排水到小溪的最大流量。对于给出的每条排水沟,雨水只能沿着一个方向流动,注意可能会出现雨水环形流动的情形。
(0 <= N <= 200) 和 M (2 <= M <= 200)
Si 和 Ei (1 <= Si, Ei <= M) 指明排水沟两端的交点,雨水从Si 流向Ei。Ci (0 <= Ci <= 10,000,000)是这条排水沟的最大容量。
思路:最大流,Dinic模板。
var head,vet,next,len,gap,dis,fan:array[..]of longint;
n,m,i,x,y,z,tot,src,source:longint; procedure add(a,b,c:longint);
begin
inc(tot);
next[tot]:=head[a];
vet[tot]:=b;
len[tot]:=c;
head[a]:=tot;
end; function min(x,y:longint):longint;
begin
if x<y then exit(x);
exit(y);
end; function dfs(u,aug:longint):longint;
var e,v,t,val,flow:longint;
begin
if u=src then exit(aug);
flow:=; val:=n-;
e:=head[u];
while e<> do
begin
v:=vet[e];
if len[e]> then
begin
if dis[u]=dis[v]+ then
begin
t:=dfs(v,min(len[e],aug-flow));
len[e]:=len[e]-t;
len[fan[e]]:=len[fan[e]]+t;
flow:=flow+t;
if dis[source]>=n then exit(flow);
if aug=flow then break;
end;
val:=min(val,dis[v]);
end;
e:=next[e];
end;
if flow= then
begin
dec(gap[dis[u]]);
if gap[dis[u]]= then dis[source]:=n;
dis[u]:=val+;
inc(gap[dis[u]]);
end;
exit(flow);
end; function maxflow:longint;
var ans:longint;
begin
fillchar(dis,sizeof(dis),);
fillchar(gap,sizeof(gap),);
gap[]:=n; ans:=;
while dis[source]<n do ans:=ans+dfs(source,maxlongint);
exit(ans);
end; begin readln(m,n);
for i:= to m do
begin
readln(x,y,z);
fan[tot+]:=tot+;
fan[tot+]:=tot+;
add(x,y,z);
add(y,x,);
end;
source:=; src:=n;
writeln(maxflow); end.
最新文章
- c模拟c++ const 转换
- 【资源】HTML5工具篇:10个营销人也能轻松使用的在线编辑平台
- 详解.Net消息队列(MSMQ)应用
- eclipse控制台中文乱码解决方法
- win7 IIS7环境下部署PHP 7.0
- 使用VirtualBox自带管理工具命令为虚拟磁盘扩展空间
- SQL Server With 递归 日期 循环
- 创建一个没有边框的并添加自定义文字的UISegmentedControl
- [BZOJ 1483][HNOI 2009]梦幻补丁(有序表启发式合并)
- 30天,O2O速成攻略【7.25北京站】
- 2016-1-6第一个完整APP 私人通讯录的实现 3:添加联系人
- B3log部署文档
- linux库之pam
- COOKIE之安全设置漫谈
- perl 执行mysql select 返回多条记录
- MySQL执行sql查询并上传至远程服务器
- 响应式编程系列(一):什么是响应式编程?reactor入门
- map,set和weakmap,weakset
- 自定义django-admin命令
- 重置BizTalk RosettaNet
热门文章
- iOS快速开发框架--Bee Framework
- linux之切换用户su(switch user)
- 自定义AlertView的方法和改变Alert的弹出位置以及其宽度
- 哈希表(Hash Table)/散列表(Key-Value)
- C++内存管理(effective c++ 04)
- 18/07/2017 R matrix
- CUB reduce errorinvalid configuration argument
- python 列表加法";+";和";extend";的区别
- LeetCode(275)H-Index II
- JAVA里的单引号和双引号及String和char的区别