HDU1532 网络流:最大流之福德福克森算法
问题描述:约翰是个农民,每次下雨的时候他的庄家总是会被淹没,这就意味着当庄家被水淹后需要很长时间才能重新生长出来,因此,约翰已经建立了一系列排水管道为了使他的庄家尽可能被淹没的最少,也就是说管道的排水量必须很大.作为一名工程师,约翰可以计算出管道网能排水的最大能力.
Input:输入包含多组用例,每组用例第一行是两个数N,M,N表示一共有N个管道,M表示一共有M个点,接下来N行每行输入三个数字a,b,c表示,a管道口到b管道口最大排水能力为c.
Output:对每一组用例,输出排水量的最大值
Sample Input:
5 4
1 2 40
1 4 20
2 4 20
2 3 30
3 4 10
Sample Output:
50
这里我采用的是Fold-Fulkerson算法。
//这里的起点默认为1,终点为节点数M #include<bits/stdc++.h>
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<queue>
#include<string.h>
#define maxint 999999999
using namespace std;
int rest[][];//二位数组rest绘制有向图
int pre[];//保存每次需找的增广路径的前驱
int Min;//写法原因Min需定义为全局变量
bool bfs(int M)//增广路径的搜索
{
queue<int>que;
bool vis[];//常规搜索都有的标记数组vis;
memset(vis,,sizeof(vis));
memset(pre,-,sizeof(pre));//前驱数组初始化
que.push();
vis[]=;
while(!que.empty())
{
int s=que.front();
que.pop();
if(s==M)
{
return true;
} for(int i=;i<=M;i++)
{
if(rest[s][i]&&vis[i]==)//rest[s][t]不为0说明选择的这条路径中从s点到达i点的通道还未被充满,说明当前存在增广路径
{
pre[i]=s;//前驱数组更新
vis[i]=;
que.push(i);
}
}
}
return false;//若不存在增广路径则返回false说明找不到
} void update(int M)//对每次所选的路径可增加流量更新,返回并加到总流量数sum中
{
if(M==)//从后往前找起,知道找到起点为止
return;
int s=pre[M];
Min=min(Min,rest[s][M]);
update(s);//回溯更新
rest[s][M]-=Min;//正反路径进行更新的区别
rest[M][s]+=Min;
} int main()
{
int a,b,c;
int N,M;
while(scanf("%d%d",&N,&M)!=EOF)
{
memset(rest,,sizeof(rest));
for(int i=;i<=N;i++)
{
scanf("%d%d%d",&a,&b,&c);
rest[a][b]+=c;//想清楚为什么是+不是=
}
int sum=;
while(bfs(M))
{
Min=maxint;//由于可能有多次路径选择所以需要在while内对全局变量Min进行初始化
update(M);
sum+=Min;
}
printf("%d\n",sum);//输出到达终点可达到的最大流量
}return ;
}
HDU1532 网络流:最大流之福德福克森算法的更多相关文章
- HDU1532 网络流最大流【EK算法】(模板题)
<题目链接> 题目大意: 一个农夫他家的农田每次下雨都会被淹,所以这个农夫就修建了排水系统,还聪明的给每个排水管道设置了最大流量:首先输入两个数n,m ;n为排水管道的数量,m为节点的数量 ...
- POJ 1459-Power Network(网络流-最大流-ISAP)C++
Power Network 时间限制: 1 Sec 内存限制: 128 MB 题目描述 A power network consists of nodes (power stations, cons ...
- [POJ1273][USACO4.2]Drainage Ditches (网络流最大流)
题意 网络流最大流模板 思路 EK也不会超时 所以说是一个数据比较水的模板题 但是POJ有点坑,多组数据,而且题目没给 哭得我AC率直掉 代码 用的朴素Dinic #include<cstdio ...
- 网络流 最大流—最小割 之SAP算法 详解
首先引入几个新名词: 1.距离标号: 所谓距离标号 ,就是某个点到汇点的最少的弧的数量(即边权值为1时某个点到汇点的最短路径长度). 设点i的标号为level[i],那么如果将满足level[i]=l ...
- HDU 3081 Marriage Match II (网络流,最大流,二分,并查集)
HDU 3081 Marriage Match II (网络流,最大流,二分,并查集) Description Presumably, you all have known the question ...
- Redraw Beautiful Drawings(hdu4888)网络流+最大流
Redraw Beautiful Drawings Time Limit: 3000/1500 MS (Java/Others) Memory Limit: 65536/65536 K (Java/O ...
- A simple Gaussian elimination problem.(hdu4975)网络流+最大流
A simple Gaussian elimination problem. Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65 ...
- 【bzoj3130】[Sdoi2013]费用流 二分+网络流最大流
题目描述 Alice和Bob做游戏,给出一张有向图表示运输网络,Alice先给Bob一种最大流方案,然后Bob在所有边上分配总和等于P的非负费用.Alice希望总费用尽量小,而Bob希望总费用尽量大. ...
- 【bzoj1822】[JSOI2010]Frozen Nova 冷冻波 计算几何+二分+网络流最大流
题目描述 WJJ喜欢“魔兽争霸”这个游戏.在游戏中,巫妖是一种强大的英雄,它的技能Frozen Nova每次可以杀死一个小精灵.我们认为,巫妖和小精灵都可以看成是平面上的点. 当巫妖和小精灵之间的直线 ...
随机推荐
- EasyUI之加载js文件顺序
在使用EasyUI时,需要引用EasyUI框架的js文件,要注意加载的顺序,jquery.min.js一定要第一个被加载.
- gucci fake bags is usually really a sign of luxurious
As soon as the violent trembling from the planet, standing company, people will certainly need to st ...
- 006-Map、Tuple、Zip实战解析
006-Map.Tuple.Zip实战解析 实战代码 Map实战 本身是映射,映射关系在实际中应用非常广泛,比如:配置信息都是Key-Value形式 键值对不存在下边关系 是一个immutable(不 ...
- [转]iOS7中UITextView contentsize改变时机
在iOS7以下版本中,对UITextView设置了text属性,则contentsize就会变化,从而可以根据contentsize的变化来改变UITextView高度来做出TextView高度随着输 ...
- canvas标签(1)--线条、矩形、圆形、文本、阴影、抛小球
从网上扒拉的代码,敲了敲代码玩. html页面显示内容很简单,只要写个canvas标签,给他一个id写js就可以了 <!DOCTYPE html> <html> <hea ...
- iOS 3D Touch 适配开发
3D Touch的主要应用 文档给出的应用介绍主要有两块: 1.A user can now press your Home screen icon to immediately access fun ...
- 关于用Java实现二维码的生成
昨天晚上看了一个视频讲的是web端把名片搞成二维码的形式,觉得挺有意思的,不过我还是初学,所以就没在网页端实现,写了命令行程序. 虽然看着程序很短,不过写的过程中还是出了问题, 最致命的就是 Grap ...
- SQL高级查询——50句查询(含答案) ---参考别人的,感觉很好就记录下来留着自己看。
--一个题目涉及到的50个Sql语句 --(下面表的结构以给出,自己在数据库中建立表.并且添加相应的数据,数据要全面些. 其中Student表中,SId为学生的ID) ---------------- ...
- C#中可直接调用WIN32的API函数--USER32.DLL
Win32的API函数可以直接在C#中直接调用,在做WinForm时还是很有帮助的.有时候直接调用Win32的API,可以很高效的实现想要的效果. using System; using System ...
- go语言的 数组、slice、map使用(转)
golang群 点击加入 go语言的 数组.slice.map使用, 由于网上有很好的说明, 不需要再写了,请看这几篇: Go语言中的 Array, Slice和 Map 深入学习golang五篇,以 ...