【CodeVS】1993草地排水
在农夫约翰的农场上,每逢下雨,Bessie最喜欢的三叶草地就积聚了一潭水。这意味着草地被水淹没了,并且小草要继续生长还要花相当长一段时间。因此,农夫约翰修建了一套排水系统来使贝茜的草地免除被大水淹没的烦恼(不用担心,雨水会流向附近的一条小溪)。作为一名一流的技师,农夫约翰已经在每条排水沟的一端安上了控制器,这样他可以控制流入排水沟的水流量。
农夫约翰知道每一条排水沟每分钟可以流过的水量,和排水系统的准确布局(起点为水潭而终点为小溪的一张网)。需要注意的是,有些时候从一处到另一处不只有一条排水沟。
根据这些信息,计算从水潭排水到小溪的最大流量。对于给出的每条排水沟,雨水只能沿着一个方向流动,注意可能会出现雨水环形流动的情形。
第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)是这条排水沟的最大容量。
输出一个整数,即排水的最大流量。
5 4 1 2 40 1 4 20 2 4 20 2 3 30 3 4 10
50
Dinic模板
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <cmath> 5 #include <queue> 6 #define inf 1e9 7 #define N 200 8 9 using namespace std; 10 11 int n,m,tn; 12 int next[2*N+10],point[2*N+10],v[2*N+10],remain[2*N+10],deep[N+10],cur[N+10]; 13 14 void se(int x,int y,int cap) 15 { 16 tn++; next[tn]=point[x]; point[x]=tn; v[tn]=y; remain[tn]=cap; 17 tn++; next[tn]=point[y]; point[y]=tn; v[tn]=x; remain[tn]=0; 18 } 19 20 inline bool bfs(int s,int t) 21 { 22 memset(deep,0x7f,sizeof(deep)); 23 for (int i=1;i<=n;i++) cur[i]=point[i]; 24 deep[s]=0; 25 queue<int> q; 26 q.push(s); 27 while (!q.empty()) 28 { 29 int now=q.front(); 30 q.pop(); 31 for (int tn=point[now];tn!=-1;tn=next[tn]) 32 if (deep[v[tn]]>inf && remain[tn]) 33 deep[v[tn]]=deep[now]+1,q.push(v[tn]); 34 } 35 return deep[t]<inf; 36 } 37 38 int dfs(int now,int t,int limit) 39 { 40 if (!limit || now==t) return limit; 41 int flow=0,f; 42 for (int tn=cur[now];tn!=-1;tn=next[tn]) 43 { 44 cur[now]=tn; 45 if (deep[v[tn]]==deep[now]+1 && (f=dfs(v[tn],t,min(limit,remain[tn])))) 46 { 47 flow+=f; 48 limit-=f; 49 remain[tn]-=f; 50 remain[tn^1]+=f; 51 if (!limit) break; 52 } 53 } 54 return flow; 55 } 56 57 int dinic(int s,int t) 58 { 59 int ans=0; 60 while (bfs(s,t)) ans+=dfs(s,t,inf); 61 return ans; 62 } 63 64 int main() 65 { 66 int a,b,cap; 67 tn=-1; 68 memset(next,-1,sizeof(next)); 69 memset(point,-1,sizeof(point)); 70 scanf("%d%d",&m,&n); 71 for (int i=1;i<=m;i++) 72 { 73 scanf("%d%d%d",&a,&b,&cap); 74 se(a,b,cap); 75 } 76 printf("%d\n",dinic(1,n)); 77 return 0; 78 }
有的模板还是背背好
转载于:https://www.cnblogs.com/DMoon/p/5198552.html
【CodeVS】1993草地排水相关推荐
- 【网络流】解题报告:luogu P2740 [USACO4.2]草地排水Drainage Ditches(Edmonds-Karp增广路,最大流模板)
题目链接:草地排水 若一条从源点到汇点的路径上各条边的剩余容量都大于0,则称这条路径为一条增广路. Edmonds-Karp增广路的策略就是不断用bfs寻找增广路,直至网络中不在存在增广路为止. 在每 ...
- 题解 【USACO 4.2.1】草地排水
[USACO 4.2.1]草地排水 Description 在农夫约翰的农场上,每逢下雨,贝茜最喜欢的三叶草地就积聚了一潭水.这意味着草地被水淹没了,并且小草要继续生长还要花相当长一段时间.因此,农夫 ...
- 问题 A: 草地排水
问题 A: 草地排水 时间限制: 2 Sec 内存限制: 256 MB 提交: 122 解决: 30 [提交][状态] 题目描述 [问题描述] 我们都知道,草地排水是一道简单的usaco网络流裸题.当 ...
- 草地排水-网络流dinic
题目描述 Description 在农夫约翰的农场上,每逢下雨,Bessie最喜欢的三叶草地就积聚了一潭水.这意味着草地被水淹没了,并且小草要继续生长还要花相当长一段时间.因此,农夫约翰修建了一套排水 ...
- [USACO4.2] 草地排水 Drainage Ditches (最大流)
题目背景 在农夫约翰的农场上,每逢下雨,贝茜最喜欢的三叶草地就积聚了一潭水.这意味着草地被水淹没了,并且小草要继续生长还要花相当长一段时间.因此,农夫约翰修建了一套排水系统来使贝茜的草地免除被大水淹没 ...
- 草地排水 改了又改(DCOJ6013)
题目描述 在农夫约翰的农场上,每逢下雨,贝茜最喜欢的三叶草地就积聚了一潭水.这意味着草地被水淹没了,并且小草要继续生长还要花相当长一段时间.因此,农夫约翰修建了一套排水系统来使贝茜的草地免除被大水淹没 ...
- [USACO4.2]草地排水Drainage Ditches
https://www.luogu.org/problemnew/show/P2740 题解:网络流+最大流 /* *@Author: STZG *@Language: C++ */ #include ...
- 【codevs1993】草地排水,网络流入门(dinic+ispa)
传送门 思路:裸 代码: #include<bits/stdc++.h> using namespace std; int n,m,tot=-1,x,y,z,s=1,t,ans; int ...
- 重走长征路---OI每周刷题记录---1月11日 2014
总目录详见https://blog.csdn.net/mrcrack/article/details/84471041 做题原则,找不到测评地址的题不做.2018-11-28 重走长征路---OI每周 ...
最新文章
- vscode编辑器自动格式化
- 前端文章精选- 收藏集 - 掘金
- [Abp 源码分析]异常处理
- 一次性获取多个oracle序列的值,实现关联表多数据的批量insert
- php分页基于oracle,PHP实现的oracle分页函数实例
- jenkinsapi操作Jenkins,提示:No valid crumb was included in the request
- 数据之路 - Python爬虫 - PySpider框架
- cjson使用_LD3320语音识别模块:LDV7模块使用详解
- 河北工程大学计算机科学与技术分数线,河北工程大学计算机科学与技术专业2016年在河南理科高考录取最低分数线...
- 新版火狐 拖 功能_Firefox 3:新功能,新功能和新功能
- 主流漫游技术-OKC802.11r介绍
- 鼠标变成方块而不是竖线
- 一文读懂JVM虚拟机:JVM虚拟机的内存管理(万字详解)
- 双云台AI智能分析跟踪会议云台摄像机技术应用
- 研究者发现DALL-E 2在用自创语言生成图像:全文黑话,人类都看不懂...
- 1017 非常可乐
- python通过Excel表格读取存储数据
- IP地址分类及特殊IP地址
- 网站建设与制作基本的流程
- (附源码)计算机毕业设计ssm公租房管理系统