hdu3549(网络流入门题-最大流的Ford-Fulkerson算法)
题目:Flow Problem
网络流深入学习请戳这里。
Ford-Fulkerson方法依赖于三种重要思想,这三个思想就是:残留网络,增广路径和割。
Ford-Fulkerson方法是一种迭代的方法。开始时,对所有的u,v∈V有f(u,v)=0,即初始状态时流的值为0。在每次迭代中,可通过寻找一条“增广路
径”来增加流值。增广路径可以看成是从源点s到汇点t之间的一条路径,沿该路径可以压入更多的流,从而增加流的值。反复进行这一过程,直至增广路
径都被找出来,根据最大流最小割定理,当不包含增广路径时,f是G中的一个最大流。
#include <stdio.h>
#include <iostream>
#include <string.h>
#include <queue>
const int N=1005;
int pre[N]; //保存增广路径上的点的前驱顶点
bool vis[N];
int map[N][N]; //残留网络容量
int s,t; //s为源点,t为汇点
int n,m;
bool BFS() //找增广路
{
int i,cur;
std::queue<int>Q;
memset(pre,0,sizeof(pre));
memset(vis,0,sizeof(vis));
vis[s]=true; Q.push(s);
while(!Q.empty())
{
cur=Q.front();
Q.pop();
if(cur==t) return true; //如果已达到汇点t,表明已经找到一条增广路径,返回true.
for(i=1;i<=n;i++)
{
if(!vis[i]&&map[cur][i]) //只有残留容量大于0时才存在边
{
Q.push(i);
pre[i]=cur;
vis[i]=true;
}
}
}
return false;
}
int Max_Flow()
{
int i,ans=0;
while(true)
{
if(!BFS()) return ans; //如果找不到增广路径就返回。
int Min=999999999;
for(i=t;i!=s;i=pre[i]) //通过pre[]数组查找增广路径上的边,求出残留容量的最小值。
Min=std::min(Min,map[pre[i]][i]);
for(i=t;i!=s;i=pre[i])
{
map[pre[i]][i]-=Min;
map[i][pre[i]]+=Min;
}
ans+=Min;
}
}
int main()
{
int T,k=1;
int u,v,c;
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&n,&m);
s=1; t=n;
memset(map,0,sizeof(map));
while(m--)
{
scanf("%d%d%d",&u,&v,&c);
map[u][v]+=c;
}
printf("Case %d: %d\n",k++,Max_Flow());
}
return 0;
}
hdu3549(网络流入门题-最大流的Ford-Fulkerson算法)相关推荐
- poj pku图论、网络流入门题总结、汇总
poj pku图论.网络流入门题总结.汇总 分类: acm图论 2010-08-25 18:49 243人阅读 评论(0) 收藏 举报 网络算法networkgraphconstructioninte ...
- dinic算法 c 语言,网络流入门—用于最大流的Dinic算法
"网络流博大精深"-sideman语 一个基本的网络流问题 最早知道网络流的内容便是最大流问题,最大流问题很好理解: 解释一定要通俗! 如右图所示,有一个管道系统,节点{1,2,3 ...
- 【网络流24题】魔术球问题(最大流)
[网络流24题]魔术球问题(最大流) 题面 Cogs 题解 是不是像极了最小路径覆盖? 因此,我们枚举放到哪一个球(也可以二分) 然后类似于最小路径覆盖的连边 因为一根柱子对应一个路径的覆盖 所以,提 ...
- 734. [网络流24题] 方格取数问题 二分图点权最大独立集/最小割/最大流
«问题描述: 在一个有m*n 个方格的棋盘中,每个方格中有一个正整数.现要从方格中取数,使任 意2 个数所在方格没有公共边,且取出的数的总和最大.试设计一个满足要求的取数算法. «编程任务: 对于给定 ...
- 【网络流24题】餐巾计划问题(最小费用最大流)
[网络流24题]餐巾计划问题(最小费用最大流) 题面 COGS 洛谷上的数据范围更大,而且要开longlong 题解 餐巾的来源分为两种: ①新买的 ②旧的拿去洗 所以,两种情况分别建图 先考虑第一种 ...
- 【网络流24题】星际转移问题(最大流)
[网络流24题]星际转移问题(最大流) 题面 Cogs 题解 因为天数是未知的,所以我们要想办法处理天数 可以选择二分或者依次累加天数 因为数据范围较小,使用二分可能反而复杂度会增高 所以使用不断累加 ...
- 【网络流24题】圆桌聚餐(最大流)
[网络流24题]圆桌聚餐(最大流) 题面 Cogs 题解 这道题很简单 首先每个单位的人数限制 直接从源点向单位连边,容量为人数 同样的, 每个桌子向汇点连边,容量为可以坐的人数 因为每个桌子只能够做 ...
- 囧——线性规划与网络流24题之网络流入门经典
搞了好久终于搞定线性规划与网络流24题,不过机器人路径至今无解,第22题感觉是数据错了~~~ 我的代码,数据和题目题解是BYVoid那弄到的:http://download.csdn.net/sour ...
- loj #6004. 「网络流 24 题」圆桌聚餐(最大流)
#6004. 「网络流 24 题」圆桌聚餐 内存限制:256 MiB时间限制:5000 ms标准输入输出 题目类型:传统评测方式:Special Judge 上传者: 匿名 提交提交记录统计讨论测试数 ...
最新文章
- ROS探索总结(五)——创建简单的机器人模型smartcar
- 把知识变成图谱一共需要花几步?89页全网最全清华知识图谱报告-学习笔记
- Python string生成随机数
- python批量读取图片并批量保存_Python实现批量读取图片并存入mongodb数据库的方法示例...
- 无线通信技术协议-Zigbee 3.0
- FTP、WEB虚拟目录作用
- matlab实现卷积编码'适合小白理解学习'
- Eclipse Android开发环境搭建
- Microsoft Office XP 智能标记的安装和安全性
- android触屏对焦_Android摄像头自动对焦与触摸对焦实现
- 童心未泯?LEGO积木iPod touch外壳,自己拼积木!
- switch手柄键位名称图解_Switch官方资料汇总!所有你想知道的都在这里
- OpenCV从摄像头中检测人脸
- 计算机主机能上网玩游戏吗,为什么现在人人都有电脑,还要去网吧玩游戏?
- word中如何设置奇偶页不同的页眉和页脚,怎么从指定页开始加页码
- 就这样,我走完了程序员的前五年,共勉!
- 将数组转为xml格式
- Linux之ELF文件初探 ---(elf源码)
- Python 依赖管理及打包三方库 Poetry
- InfiniBand -- 无限带宽技术(简称IB)
热门文章
- 数据源(连接池)的作用
- 转发和重定向和request域对象
- SpringBoot_web开发-简介
- 索引创建以及优化_1
- java xml字符串提取元素,如何从Java中将子元素从XML提取到字符串?
- AtomicIntegerFieldUpdater字段原子更新类
- 利用 exe4j 将 JAR 包制成免安装 JDK 的 EXE 文件
- 通用权限管理系统组件 (GPM - General Permissions Manager) - 支持请求
- vue -- 动态加载组件 (tap 栏效果)
- LinuxUSB驱动程序调试--009:编写应用程序---验证协议【转】