题目: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算法)相关推荐

  1. poj pku图论、网络流入门题总结、汇总

    poj pku图论.网络流入门题总结.汇总 分类: acm图论 2010-08-25 18:49 243人阅读 评论(0) 收藏 举报 网络算法networkgraphconstructioninte ...

  2. dinic算法 c 语言,网络流入门—用于最大流的Dinic算法

    "网络流博大精深"-sideman语 一个基本的网络流问题 最早知道网络流的内容便是最大流问题,最大流问题很好理解: 解释一定要通俗! 如右图所示,有一个管道系统,节点{1,2,3 ...

  3. 【网络流24题】魔术球问题(最大流)

    [网络流24题]魔术球问题(最大流) 题面 Cogs 题解 是不是像极了最小路径覆盖? 因此,我们枚举放到哪一个球(也可以二分) 然后类似于最小路径覆盖的连边 因为一根柱子对应一个路径的覆盖 所以,提 ...

  4. 734. [网络流24题] 方格取数问题 二分图点权最大独立集/最小割/最大流

    «问题描述: 在一个有m*n 个方格的棋盘中,每个方格中有一个正整数.现要从方格中取数,使任 意2 个数所在方格没有公共边,且取出的数的总和最大.试设计一个满足要求的取数算法. «编程任务: 对于给定 ...

  5. 【网络流24题】餐巾计划问题(最小费用最大流)

    [网络流24题]餐巾计划问题(最小费用最大流) 题面 COGS 洛谷上的数据范围更大,而且要开longlong 题解 餐巾的来源分为两种: ①新买的 ②旧的拿去洗 所以,两种情况分别建图 先考虑第一种 ...

  6. 【网络流24题】星际转移问题(最大流)

    [网络流24题]星际转移问题(最大流) 题面 Cogs 题解 因为天数是未知的,所以我们要想办法处理天数 可以选择二分或者依次累加天数 因为数据范围较小,使用二分可能反而复杂度会增高 所以使用不断累加 ...

  7. 【网络流24题】圆桌聚餐(最大流)

    [网络流24题]圆桌聚餐(最大流) 题面 Cogs 题解 这道题很简单 首先每个单位的人数限制 直接从源点向单位连边,容量为人数 同样的, 每个桌子向汇点连边,容量为可以坐的人数 因为每个桌子只能够做 ...

  8. 囧——线性规划与网络流24题之网络流入门经典

    搞了好久终于搞定线性规划与网络流24题,不过机器人路径至今无解,第22题感觉是数据错了~~~ 我的代码,数据和题目题解是BYVoid那弄到的:http://download.csdn.net/sour ...

  9. loj #6004. 「网络流 24 题」圆桌聚餐(最大流)

    #6004. 「网络流 24 题」圆桌聚餐 内存限制:256 MiB时间限制:5000 ms标准输入输出 题目类型:传统评测方式:Special Judge 上传者: 匿名 提交提交记录统计讨论测试数 ...

最新文章

  1. ROS探索总结(五)——创建简单的机器人模型smartcar
  2. 把知识变成图谱一共需要花几步?89页全网最全清华知识图谱报告-学习笔记
  3. Python string生成随机数
  4. python批量读取图片并批量保存_Python实现批量读取图片并存入mongodb数据库的方法示例...
  5. 无线通信技术协议-Zigbee 3.0
  6. FTP、WEB虚拟目录作用
  7. matlab实现卷积编码'适合小白理解学习'
  8. Eclipse Android开发环境搭建
  9. Microsoft Office XP 智能标记的安装和安全性
  10. android触屏对焦_Android摄像头自动对焦与触摸对焦实现
  11. 童心未泯?LEGO积木iPod touch外壳,自己拼积木!
  12. switch手柄键位名称图解_Switch官方资料汇总!所有你想知道的都在这里
  13. OpenCV从摄像头中检测人脸
  14. 计算机主机能上网玩游戏吗,为什么现在人人都有电脑,还要去网吧玩游戏?
  15. word中如何设置奇偶页不同的页眉和页脚,怎么从指定页开始加页码
  16. 就这样,我走完了程序员的前五年,共勉!
  17. 将数组转为xml格式
  18. Linux之ELF文件初探 ---(elf源码)
  19. Python 依赖管理及打包三方库 Poetry
  20. InfiniBand -- 无限带宽技术(简称IB)

热门文章

  1. 数据源(连接池)的作用
  2. 转发和重定向和request域对象
  3. SpringBoot_web开发-简介
  4. 索引创建以及优化_1
  5. java xml字符串提取元素,如何从Java中将子元素从XML提取到字符串?
  6. AtomicIntegerFieldUpdater字段原子更新类
  7. 利用 exe4j 将 JAR 包制成免安装 JDK 的 EXE 文件
  8. 通用权限管理系统组件 (GPM - General Permissions Manager) - 支持请求
  9. vue -- 动态加载组件 (tap 栏效果)
  10. LinuxUSB驱动程序调试--009:编写应用程序---验证协议【转】