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=; 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,,sizeof(pre));
memset(vis,,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=;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=;
while(true)
{
if(!BFS()) return ans; //如果找不到增广路径就返回。
int Min=;
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=;
int u,v,c;
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&n,&m);
s=; t=n;
memset(map,,sizeof(map));
while(m--)
{
scanf("%d%d%d",&u,&v,&c);
map[u][v]+=c;
}
printf("Case %d: %d\n",k++,Max_Flow());
}
return ;
}

hdu 3549 网络流最大流 Ford-Fulkerson的更多相关文章

  1. HDU 3549 网络最大流再试

    http://acm.hdu.edu.cn/showproblem.php?pid=3549 同样的网络最大流 T了好几次原因是用了cout,改成printf就A了 还有HDU oj的编译器也不支持以 ...

  2. HDU 3549 Flow Problem 流问题(最大流,入门)

    题意:给个赤裸的最大流问题. 思路:EK+BFS解决.跟HDU1532几乎一样的. #include <bits/stdc++.h> #define LL long long #defin ...

  3. HDU 3549 Flow Problem(最大流)

    HDU 3549 Flow Problem(最大流) Time Limit: 5000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/ ...

  4. ACM/ICPC 之 网络流入门-Ford Fulkerson与SAP算法(POJ1149-POJ1273)

    第一题:按顾客访问猪圈的顺序依次构图(顾客为结点),汇点->第一个顾客->第二个顾客->...->汇点 //第一道网络流 //Ford-Fulkerson //Time:47M ...

  5. HDU 3081 Marriage Match II (网络流,最大流,二分,并查集)

    HDU 3081 Marriage Match II (网络流,最大流,二分,并查集) Description Presumably, you all have known the question ...

  6. 网络流 HDU 3549 Flow Problem

    网络流 HDU 3549 Flow Problem 题目:pid=3549">http://acm.hdu.edu.cn/showproblem.php?pid=3549 用增广路算法 ...

  7. hdu 3549 Flow Problem (网络最大流)

    Flow Problem Time Limit: 5000/5000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Tota ...

  8. Flow Problem HDU - 3549

    Flow Problem HDU - 3549 Network flow is a well-known difficult problem for ACMers. Given a graph, yo ...

  9. Redraw Beautiful Drawings(hdu4888)网络流+最大流

    Redraw Beautiful Drawings Time Limit: 3000/1500 MS (Java/Others) Memory Limit: 65536/65536 K (Java/O ...

随机推荐

  1. leetcode 215 第K个最大的元素

    此问题可转化为Top K问题进行考虑,当用小顶堆选出K个最大值时,堆顶的元素即为第k大的元素 class Solution { public: int findKthLargest(vector< ...

  2. [pipenv]Warning: Python 3.7 was not found on your system…

    前置条件: 切换到pipfile文件所在目录gotest_official 问题描述: 使用pipenv install创建虚拟环境,报错 wangju@wangju-HP--G4:~/Desktop ...

  3. 百度地图POI爬取

    我们研究生的课程内容,做下笔记记录一下. 使用的python环境是python3.7 用的图大部分都是老师ppt里的图,懒得自己截了-- 申请百度开发者密匙 (1)注册百度用户,注册过的话,直接登录就 ...

  4. 【ZT】Enhancement Framework – Introduction

    Enhancement Framework – Introduction By Naimesh Patel | March 26, 2014 | Enhancement Implementation ...

  5. svn版本合并

    假如你的项目(这里指的是手机客户端项目)的某个版本(例如1.0版本)已经完成开发.测试并已经上线了,接下来接到新的需求,新需求的开发需要修改多个文件中的代码,当需求已经开始开发一段时间的时候,突然接到 ...

  6. 进程管理工具之supervisor[安装并使用]

    在Linux服务器中,有时候我们需要一个进程需要可靠的在后台运行,并且能够监控进程状态,在意外结束时能够自动重启等.此时就可以使用supervisor. supervisor 是使用Python开发的 ...

  7. 【SSM】---Spring+SpringMVC+Mybatis框架整合

    参考 百度经验 https://jingyan.baidu.com/article/2a1383288a85a9074a134f1b.html CSDN http://blog.csdn.net/ge ...

  8. centos中切换图形与命令行界面

    1.在命令行的centos中安装图形化 配置本地源 [root@localhost yum.repos.d]# yum clean all [root@localhost yum.repos.d]# ...

  9. WebSocket-Node

    WebSocket Client & Server Implementation for Node 参考资料:[https://github.com/theturtle32/WebSocket ...

  10. 爬虫七之分析Ajax请求并爬取今日头条

    爬取今日头条图片 这里只讨论出现的一些问题,代码在最下面github链接里. 首先,今日头条取消了"图集"这一选项,因此对于爬虫来说效率降低了很多: 在所有代码都完成后,也许是爬取 ...