博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[USACO4.2]草地排水Drainage Ditches
阅读量:5291 次
发布时间:2019-06-14

本文共 1884 字,大约阅读时间需要 6 分钟。

在农夫约翰的农场上,每逢下雨,贝茜最喜欢的三叶草地就积聚了一潭水。这意味着草地被水淹没了,并且小草要继续生长还要花相当长一段时间。因此,农夫约翰修建了一套排水系统来使贝茜的草地免除被大水淹没的烦恼(不用担心,雨水会流向附近的一条小溪)。作为一名一流的技师,农夫约翰已经在每条排水沟的一端安上了控制器,这样他可以控制流入排水沟的水流量。

题目描述

农夫约翰知道每一条排水沟每分钟可以流过的水量,和排水系统的准确布局(起点为水潭而终点为小溪的一张网)。需要注意的是,有些时候从一处到另一处不只有一条排水沟。

根据这些信息,计算从水潭排水到小溪的最大流量。对于给出的每条排水沟,雨水只能沿着一个方向流动,注意可能会出现雨水环形流动的情形。

输入输出格式

输入格式:

 

第1行: 两个用空格分开的整数N (0 <= N <= 200) 和 M (2 <= M <= 200)。N是农夫John已经挖好的排水沟的数量,M是排水沟交叉点的数量。交点1是水潭,交点M是小溪。

第二行到第N+1行: 每行有三个整数,Si, Ei, 和 Ci。Si 和 Ei (1 <= Si, Ei <= M) 指明排水沟两端的交点,雨水从Si 流向Ei。Ci (0 <= Ci <= 10,000,000)是这条排水沟的最大容量。

 

输出格式:

 

输出一个整数,即排水的最大流量。

 

输入输出样例

输入样例#1:
5 41 2 401 4 202 4 202 3 303 4 10
输出样例#1:
50

说明

题目翻译来自NOCOW。

USACO Training Section 4.2

思路:Dinic

代码实现:

1 #include
2 #include
3 int n,m,ans,d[210]; 4 int a,b,c; 5 int h[210],hs,head,tail; 6 struct edge{
int s,n,v,r;}e[500]; 7 struct queue{
int s,d;}q[210]; 8 int min(int x,int y){
return x
tail){14 a=q[tail].s,b=q[tail++].d;15 for(int i=h[a];i;i=e[i].n) if(!d[e[i].s]&&e[i].v){16 q[head++]=(queue){e[i].s,b+1};17 d[e[i].s]=b+1;18 }19 }20 }21 int ap(int k,int t,int v){22 if(k==t) return v;23 int act=0;24 for(int i=h[k];i;i=e[i].n) if(e[i].v&&d[e[i].s]==d[k]+1){25 int ret=ap(e[i].s,t,min(v-act,e[i].v));26 if(ret) e[i].v-=ret,e[e[i].r].v+=ret,act+=ret;27 }28 return act;29 }30 bool Dinic(int s,int t){31 bfs(s,t);32 if(!d[t]) return 0;33 ans+=ap(s,t,1000000000);34 }35 int main(){36 scanf("%d%d",&m,&n);37 for(int i=1;i<=m;i++){38 scanf("%d%d%d",&a,&b,&c);39 e[++hs]=(edge){b,h[a],c,hs+1},h[a]=hs;40 e[++hs]=(edge){a,h[b],0,hs-1},h[b]=hs;41 }42 while(Dinic(1,n));43 printf("%d\n",ans);44 return 0;45 }

网络流的基础实现还是比较容易的。

题目来源:洛谷

转载于:https://www.cnblogs.com/J-william/p/6501921.html

你可能感兴趣的文章
18个最佳代码编辑器
查看>>
大胆地去做自己认为应该做的事情
查看>>
通用所有数据库的插件,按键TC易语言VB,VC,DELPHI调用 ACTIVEX DLL
查看>>
HTTP状态码的类别
查看>>
android TextView、EditView部分字体特殊处理
查看>>
三元操作符的类型务必一致
查看>>
跨域请求的解决方案
查看>>
SpannableString与SpannableStringBuilder
查看>>
给大家推荐:五个Python小项目,Github上的人气很高的
查看>>
cdoj 1134 男神的约会 状压dp
查看>>
transport error 202: bind failed: 地址已在使用
查看>>
【ASP.NET Core快速入门】(十二)JWT 设计解析及定制
查看>>
Oracle 的基本操作符
查看>>
java 8 启动脚本优化
查看>>
ThinkPHP getBy动态查询
查看>>
hdu_4547_CD操作(在线LCA)
查看>>
lintcode-57-三数之和
查看>>
线性基入门
查看>>
多线程——匿名线程
查看>>
Swift语法之 ---- ?和!区别
查看>>