博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ-1273Drainage Ditches(网络流入门题,最大流)
阅读量:4616 次
发布时间:2019-06-09

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

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. 
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. 

Input

The input includes several cases. For each case, the first line contains 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. Each of the following 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.

Output

For each case, output a single integer, the maximum rate at which water may emptied from the pond.

Sample Input

5 41 2 401 4 202 4 202 3 303 4 10

Sample Output

50 代码:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
typedef long long ll;using namespace std;const int inf = 0x3f3f3f3f;const int maxn = 205;const int maxe = 4 * maxn * maxn;struct MaxFlow { struct Edge { int v, w, nxt; } edge[maxe]; int head[maxn], tot, level[maxn]; void init(){ memset(head,-1,sizeof(head)); tot=0; } void add(int u, int v, int w) { edge[tot].v = v; edge[tot].w = w; edge[tot].nxt = head[u]; head[u] = tot++; edge[tot].v = u; edge[tot].w = 0; edge[tot].nxt = head[v]; head[v] = tot++; } bool bfs(int s, int t) { memset(level, -1, sizeof(level)); queue
q; q.push(s); level[s] = 0; while(!q.empty()) { int u = q.front(); q.pop(); for(int i = head[u]; ~i; i = edge[i].nxt) { if(edge[i].w > 0 && level[edge[i].v] < 0) { level[edge[i].v] = level[u] + 1; q.push(edge[i].v); } } } return level[t] > 0; } int dfs(int u, int t, int f) { if(u == t) return f; for(int i = head[u]; ~i; i = edge[i].nxt) { int v = edge[i].v; if(edge[i].w > 0 && level[v] > level[u]) { int d = dfs(v, t, min(f, edge[i].w)); if(d > 0) { edge[i].w -= d; edge[i ^ 1].w += d; return d; } } } level[u] = -1; return 0; } int solve(int s, int t) { int flow = 0, f; while(bfs(s, t)) { while(f = dfs(s, t, inf)) flow += f; } return flow; }}F; int main(){ int n,m; while(~scanf("%d%d",&m,&n)) { F.init(); for(int i=0;i

 

 

转载于:https://www.cnblogs.com/Staceyacm/p/11325854.html

你可能感兴趣的文章
springMVC学习总结(一) --springMVC搭建
查看>>
Flutter中通过https post Json接收Json
查看>>
负载均衡
查看>>
Linux环境下连接Mssql 2008
查看>>
Compiling wxWidgets
查看>>
c语言日历系统的设计与部分实现
查看>>
BZOJ 1770: [Usaco2009 Nov]lights 燈( 高斯消元 )
查看>>
NYOJ 478
查看>>
Mac 配置几个环境变量
查看>>
10.10
查看>>
HDU 影子问题
查看>>
vue-cli脚手架
查看>>
状态模式
查看>>
分层模式开发+MVC模式开发--韩顺平雇员数据库管理
查看>>
pwnable.kr-collision
查看>>
HDU-5319 Painter,深搜标记!
查看>>
为CentOS系统配置防火墙设置
查看>>
NSFileManager、NSFileHandle
查看>>
HTML 表单
查看>>
[bzoj4864][BeiJing 2017 Wc]神秘物质
查看>>