hdu 3549最大流Ford-Fulkerson算法
Ford-Fulkerson算法
戳戳http://www.cnblogs.com/luweiseu/archive/2012/07/14/2591573.html
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;
}
hdu 3549最大流Ford-Fulkerson算法的更多相关文章
- 【网络流#1】hdu 3549 - 最大流模板题
因为坑了无数次队友 要开始学习网络流了,先从基础的开始,嗯~ 这道题是最大流的模板题,用来测试模板好啦~ Edmonds_Karp模板 with 前向星 时间复杂度o(V*E^2) #include& ...
- hdu 3549 最大流
#include<stdio.h> #include<string.h> #include<queue> #include<iostream> usin ...
- ACM/ICPC 之 网络流入门-Ford Fulkerson与SAP算法(POJ1149-POJ1273)
第一题:按顾客访问猪圈的顺序依次构图(顾客为结点),汇点->第一个顾客->第二个顾客->...->汇点 //第一道网络流 //Ford-Fulkerson //Time:47M ...
- HDU 3549 Flow Problem(最大流)
HDU 3549 Flow Problem(最大流) Time Limit: 5000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/ ...
- hdu 3549 Flow Problem (网络最大流)
Flow Problem Time Limit: 5000/5000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Tota ...
- poj 1273 Drainage Ditches(最大流,E-K算法)
一.Description Every time it rains on Farmer John's fields, a pond forms over Bessie's favorite clove ...
- Flow Problem HDU - 3549
Flow Problem HDU - 3549 Network flow is a well-known difficult problem for ACMers. Given a graph, yo ...
- 网络流 HDU 3549 Flow Problem
网络流 HDU 3549 Flow Problem 题目:pid=3549">http://acm.hdu.edu.cn/showproblem.php?pid=3549 用增广路算法 ...
- HDU 1532 最大流入门
1.HDU 1532 最大流入门,n个n条边,求第1点到第m点的最大流.只用EK做了一下. #include<bits/stdc++.h> using namespace std; #pr ...
随机推荐
- mk-js,一个基于react、nodejs的全栈框架
前言 在这个前端技术爆炸的时代,不自己写套开源框架出门都不好意思跟别人说自己搞前端.去年年初接触的react,16年7月份在github开源了一套针对react.redux探索的项目,近期和伙伴们一起 ...
- 【.net 深呼吸】在配置节中使用元素集合
前一篇博文中,老周介绍了自定义配置节的方法,本文咱们再往深一层,再看看如何在自定义的配置节中使用配置元素集合. 前面咱们说过,Configuration Section是特殊的配置元素,它可以包装一类 ...
- Eclipse错误:Implicit super constructor ClassName is undefined for default constructor. Must define an explicit constructor
public class Test01 { private String name; private int age; public Test01(String name){ this.name = ...
- 如何发布自己的开源框架到CocoaPods【转】
在开发过程中,经常会使用到第三框架,我们通过一个pod install命令,很方便的就将第三方框架加到我们自己的项目中. 如果我们也想将自己写的组件或库开源出去,让别人也可以通过pod install ...
- NYOJ--42--dfs--一笔画问题
/* Name: NYOJ--42--一笔画问题 Author: shen_渊 Date: 18/04/17 15:22 Description: 这个题用并查集做,更好.在练搜索,试试手 本来用的v ...
- ABAP中Collect的用法
vaule:collect在非数值字段相同的情况下,起到了数值字段汇总作用. 非数值字段不同的情况下,效果和append相同执行插入内表操作,当非数值字段相同的时候,则相当于modify的效果,只不过 ...
- openstack中dashboard页面RuntimeError: Unable to create a new session key. It is likely that the cache is unavailable.
环境是centos7,直接跑在服务器上. 按照官网一步步安装openstack,到验证dashborad时出错. 登录http://192.168.1.73/dashboard ,输入域名,用户名,密 ...
- 从Google Play下载应用并不安全,上千款监视软件伪装其中
如果你认为在官方应用市场里下载app就觉得安全的话,小编可以负责任的回答你:"too young too simple,sometimes native" 今年4月,BankBot ...
- cms系统架构设计
本篇只包含已实现系统的部分设计,若后续有新需求再另行更新. 在线用户表 用户角色表 用户权限表 ……
- Jenkins 环境搭建
本文为jenkins入手教程,全文分为 jenkins安装.系统管理(配置全局安全.全局工具配置.管理插件).创建项目(同时创建证书),管理视图,jenkins 客户端,执行构建.查看任务历史 一.j ...