POJ 1273 Drainage Ditches(EK) - from lanshui_Yang
来源:互联网 发布:java扑克牌比大小 编辑:程序博客网 时间:2024/05/29 13:25
题目大意:每次下雨的时候,农场主John 的农场里就会形成一个池塘,这样就会淹没其中一个小块土地,在这块土地上种植了Bessie 最喜欢的植物。这意味着这些植物要被水淹没一段时间,而后要花很长时间才能重新长出来。因此,John 修建了一套排水系统,这样种植了这些植物的土地就不会被淹没。雨水被排到了附近的一条小河中。作为一个一流的工程师,John还在每条排水沟的起点安装了调节阀门,这样可以控制流入排水沟的水流的速度。
John不仅知道每条排水沟每分钟能排多少加仑的水,而且还知道整个排水系统的布局,
池塘里的水通过这个排水系统排到排水沟,并最终排到小河中,构成一个复杂的排水网络。
给定排水系统,计算池塘里能通过这个排水系统排水道小河中的最大水流速度。每条排水沟的流水方向是单方向的,但在排水系统中,流水可能构成循环。
解题思路:此题是一道基础的最大流。用EK直接水过。。。但要注意,输入中可能存在重边,要记得处理,还有,别忘了处理回流,HDU的题目数据较水(不处理回流也能过)。第一道网络流题目,纪念下。。。
请看代码:
#include<iostream>#include<string>#include<algorithm>#include<cstring>#include<queue>#include<cmath>#include<cstdio>using namespace std ;const int MAXN = 205 ;inline void RD(int &a){ a = 0 ; char t ; do { t = getchar() ; } while (t < '0' || t > '9') ; a = t - '0' ; while ((t = getchar()) >= '0' && t <= '9') { a = a * 10 + t - '0' ; }}inline void OT(int a){ if(a >= 10) { OT(a / 10) ; } putchar(a % 10 + '0') ;}struct Edge{ int c ; int f ;} e[MAXN][MAXN] ;bool vis[MAXN] ;int pre[MAXN] ; // 记录bfs后增广路中结点的前驱结点const int INF = 0x7fffffff ;int m , n ;int s , t ; // 源点、汇点int flow ;void init(){ int i ; s = 1 ; t = n ; flow = 0 ; memset(e , 0 , sizeof(e)) ; memset(vis , 0 , sizeof(vis)) ; for(i = 0 ; i < m ; i ++) { int a , b , c ; scanf("%d%d%d" , &a , &b , &c) ; e[a][b].c += c ; // 处理重边 e[a][b].f = 0 ; }}queue<int> q ;void bfs(int u){ memset(vis , 0 , sizeof(vis)) ; memset(pre , -1 , sizeof(pre)) ; while (!q.empty()) q.pop() ; q.push(u) ; vis[u] = true ; int tmp ; while (!q.empty()) { tmp = q.front() ; q.pop() ; int i ; for(i = 1 ; i <= n ; i ++) { if(!vis[i] && e[tmp][i].c - e[tmp][i].f > 0 ) { vis[i] = true ; pre[i] = tmp ; if(i == t) return ; q.push(i) ; } } }}void solve(){ flow = 0 ; while (1) { bfs(s) ; if(pre[t] == -1) break ; int delta = INF ; int tmp = t ; while (pre[tmp] != -1) { delta = min(e[ pre[tmp] ][tmp].c - e[ pre[tmp] ][tmp].f , delta) ; tmp = pre[tmp] ; } tmp = t ; while (pre[tmp] != -1) { e[ pre[tmp] ][tmp].f += delta ; e[tmp][ pre[tmp] ].f -= delta ; // 处理回流 tmp = pre[tmp] ; } flow += delta ; } printf("%d\n" , flow) ;}int main(){ while (scanf("%d%d" , &m , &n) != EOF) { init() ; solve() ; } return 0 ;}
- POJ 1273 Drainage Ditches(EK) - from lanshui_Yang
- POJ 1273 Drainage Ditches(我的EK算法模板)
- hdu 1532 poj 1273 Drainage Ditches (ek算法)
- POJ 1273~Drainage Ditches(网络最大流ek,dinic)
- poj 1273 Drainage Ditches(最大流的EK算法模板)
- Poj 1273 Drainage Ditches (最大流EK+ISAP)
- poj 1273 Drainage Ditches---EK求最大流
- poj 1273 Drainage Ditches (ek算法,网络流)
- POJ 1273 Drainage Ditches (网络流 EK && Dinic)
- HDU 1532 && POJ 1273 Drainage Ditches (网络流 EK算法)
- poj 1273 & hdu 1532 Drainage Ditches(最大流 )EK,dinic模板
- hdu 1532 Drainage Ditches(EK算法)
- hdu1532-Drainage Ditches(最大流&EK)
- POJ 1273 Drainage Ditches
- POJ 1273 Drainage Ditches
- POJ 1273 Drainage Ditches
- poj 1273 Drainage Ditches
- poj 1273 Drainage Ditches
- 不错的网站
- sigar监控
- [转载 from 子清行]求质数 之 除余法(C语言描述)
- Jquery What’s $, anyway?
- CxImage使用心得
- POJ 1273 Drainage Ditches(EK) - from lanshui_Yang
- struts2 上传2007直接被过滤掉 ----FileUploadInterceptor:56: Content-Type not allowed:
- 新浪微博分享功能,SSO授权完成后又弹出OAuth2.0授权页面的问题
- 第一章总结
- 递归 加引用 实现tree 和 无限级菜单
- 日志太大重命名一下。movefile()
- 用 vmlinuz 得到 vmlinux 逆转化
- 130829大对象
- 数据收集项目总结