POJ-1273-Drainage Ditches 朴素增广路
Drainage Ditches
Description
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 4 Sample Output 50 Source |
[Submit] [Go Back] [Status]
[Discuss]
解题思路:
是一道裸的一般增广路算法的题目,就是计算水塘最大的流量排到附近的小河中。
增广路中可能含有反向弧,最后流量改进的时候对于反向弧的处理,既可以按照残留网络中的对应的正向弧那样增加流量也可以直接把这条反向弧的流量减少相应的流量。
因为我用这两种解法都能AC,说明效果是一样的。
源代码:
<span style="font-size:18px;">
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
using namespace std; #define MAXN 210 struct Matrix
{
int c,f;//容量,流量
};
Matrix Edge[MAXN][MAXN];//流及容量(邻接矩阵)
int M,N;//弧的条数,顶点个数
int s,t;//源点(1),汇点(n)
int residul[MAXN][MAXN];//残留网络
int qu[MAXN*MAXN],qs,qe;//队列、队列头、队列尾
int pre[MAXN];//pre[i]为增广路上顶点的访问标志
int vis[MAXN];//BFS算法中各个顶点的访问标志
int maxflow,min_augment;//最大流流量、每次增广时的可以改进的量
void find_augment_path()//BFS寻找增广路
{
int i,cu;//cu为队列头顶点
memset(vis,0,sizeof(vis));
qs=0;qu[qs]=s;//s入队列
pre[s]=s;vis[s]=1;qe=1;
memset(residul,0,sizeof(residul));memset(pre,0,sizeof(pre));
while(qs<qe&&pre[t]==0)
{
cu=qu[qs];
for(i=1;i<=N;i++)
{
if(vis[i]==0)
{
if(Edge[cu][i].c-Edge[cu][i].f>0)
{
residul[cu][i]=Edge[cu][i].c-Edge[cu][i].f;
pre[i]=cu;qu[qe++]=i;vis[i]=1;
}
else if(Edge[i][cu].f>0)
{
residul[cu][i]=Edge[i][cu].f;
pre[i]=cu;qu[qe++]=i;vis[i]=1;
}
}
}
qs++;
}
}
void augment_flow()//计算可改进量
{
int i=t,j;//t为汇点
if(pre[i]==0)
{
min_augment=0;return;
}
j=0x7fffffff;
while(i!=s)//计算增广路上可改进量的最小值
{
if(residul[pre[i]][i]<j) j=residul[pre[i]][i];
i=pre[i];
}
min_augment=j;
}
void update_flow()//调整流量
{
int i=t;//t为汇点
if(pre[i]==0)return;
while(i!=s)
{
if(Edge[pre[i]][i].c-Edge[pre[i]][i].f>0)
Edge[pre[i]][i].f+=min_augment;
else if(Edge[i][pre[i]].f>0) Edge[pre[i]][i].f+=min_augment;//或者写成Edge[i][pre[i]]-=min_augment;
i=pre[i];
}
}
void solve()
{
s=1;t=N;
maxflow=0;
while(1)
{
find_augment_path();//BFS寻找增广路
augment_flow();//计算可改进量
maxflow+=min_augment;
if(min_augment>0) update_flow();
else return;
}
}
int main()
{
int i;
int u,v,c;
while(scanf("%d %d",&M,&N)!=EOF)
{
memset(Edge,0,sizeof(Edge));
for(i=0;i<M;i++)
{
scanf("%d %d %d",&u,&v,&c);
Edge[u][v].c+=c;
}
solve();
printf("%d\n",maxflow);
}
return 0;
}
</span>
POJ-1273-Drainage Ditches 朴素增广路的更多相关文章
- poj 1273 Drainage Ditches(最大流)
http://poj.org/problem?id=1273 Drainage Ditches Time Limit: 1000MS Memory Limit: 10000K Total Subm ...
- POJ 1273 - Drainage Ditches - [最大流模板题] - [EK算法模板][Dinic算法模板 - 邻接表型]
题目链接:http://poj.org/problem?id=1273 Time Limit: 1000MS Memory Limit: 10000K Description Every time i ...
- POJ 1273 Drainage Ditches (网络最大流)
http://poj.org/problem? id=1273 Drainage Ditches Time Limit: 1000MS Memory Limit: 10000K Total Sub ...
- POJ 1273 Drainage Ditches题解——S.B.S.
Drainage Ditches Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 67823 Accepted: 2620 ...
- POJ 1273 Drainage Ditches
Drainage Ditches Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 67387 Accepted: 2603 ...
- Poj 1273 Drainage Ditches(最大流 Edmonds-Karp )
题目链接:poj1273 Drainage Ditches 呜呜,今天自学网络流,看了EK算法,学的晕晕的,留个简单模板题来作纪念... #include<cstdio> #include ...
- POJ 1273 Drainage Ditches(网络流dinic算法模板)
POJ 1273给出M条边,N个点,求源点1到汇点N的最大流量. 本文主要就是附上dinic的模板,供以后参考. #include <iostream> #include <stdi ...
- 网络流最经典的入门题 各种网络流算法都能AC。 poj 1273 Drainage Ditches
Drainage Ditches 题目抽象:给你m条边u,v,c. n个定点,源点1,汇点n.求最大流. 最好的入门题,各种算法都可以拿来练习 (1): 一般增广路算法 ford() #in ...
- POJ 1273 Drainage Ditches【最大流模版】
题意:现在有m个池塘(从1到m开始编号,1为源点,m为汇点),及n条有向水渠,给出这n条水渠所连接的点和所能流过的最大流量,求从源点到汇点能流过的最大流量 Dinic #include<iost ...
随机推荐
- 笔记-java泛型详解
首先,先说明一下,java泛型文章的出处:http://www.cnblogs.com/lzq198754/p/5780426.html 作为学习笔记保存. 1.为什么需要泛型 泛型在Java中有很重 ...
- IIS部署网站时常见问题解决
首先服务器上安装IIS和Framework\v4.0 一.打开iis服务管理器 左侧目录中选择网站右键,选择添加网站 填写网站名称.选择项目存放的路径.ip地址和端口 VS用的是4.0,iis中网站也 ...
- 紧跟腾讯大王卡:B站2233卡“基友号”即将上线
来自B站官方的消息显示,B站在近期也将推出"基友号"功能,功能的内容是通话免费,考虑到这类互联网套餐都是中国联通在运营,因此在内容上可能也会效仿腾讯大王卡实现免费通话. 目前,B站 ...
- Ionic3 创建应用后,目录结构
ionic start myApp blank (空项目) hooks --编译cordova时自定义的脚本命令,方便整合到我们的编译系统和版本控制系统中 node_modules --node各类依 ...
- python web框架篇:views视图函数
Django请求的生命周期是怎样的? 简单地说,通过URL对应关系匹配 ->找到对应的函数(或者类)->返回字符串(或者读取Html之后返回渲染的字符串) 解剖起来如下: 1. 当用户在浏 ...
- hdu 1520 Anniversary party(入门树形DP)
Anniversary party Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 6926 Accepted: 3985 ...
- scanf和cin性能的比较
我的实验机器配置是: 处理器:Intel(R) Core(TM) i3-7100U CPU @ 2.40GHz 2.40GHz 随机访问存储器:4.00GB 操作系统:Windows10 集成开发环境 ...
- SSH框架整合--applicationContext.xml文件配置实例
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.spr ...
- nova创建虚拟机源码分析系列之六 api入口create方法
openstack 版本:Newton 注:博文图片采用了很多大牛博客图片,仅作为总结学习,非商用.该图全面的说明了nova创建虚机的过程,从逻辑的角度清晰的描述了前端请求创建虚拟机之后发生的一系列反 ...
- .NET Core多平台项目模板eShopOnContainers编译手记
之前写了一个功能性的文件上传asp.net core的小程序,加上点七七八八的东西,勉强能够应付了,打算学习一下微软的官方.NET CORE微服务示例https://github.com/dotnet ...