hdu 3549 网络流最大流 Ford-Fulkerson
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的更多相关文章
- HDU 3549 网络最大流再试
http://acm.hdu.edu.cn/showproblem.php?pid=3549 同样的网络最大流 T了好几次原因是用了cout,改成printf就A了 还有HDU oj的编译器也不支持以 ...
- HDU 3549 Flow Problem 流问题(最大流,入门)
题意:给个赤裸的最大流问题. 思路:EK+BFS解决.跟HDU1532几乎一样的. #include <bits/stdc++.h> #define LL long long #defin ...
- HDU 3549 Flow Problem(最大流)
HDU 3549 Flow Problem(最大流) Time Limit: 5000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/ ...
- ACM/ICPC 之 网络流入门-Ford Fulkerson与SAP算法(POJ1149-POJ1273)
第一题:按顾客访问猪圈的顺序依次构图(顾客为结点),汇点->第一个顾客->第二个顾客->...->汇点 //第一道网络流 //Ford-Fulkerson //Time:47M ...
- HDU 3081 Marriage Match II (网络流,最大流,二分,并查集)
HDU 3081 Marriage Match II (网络流,最大流,二分,并查集) Description Presumably, you all have known the question ...
- 网络流 HDU 3549 Flow Problem
网络流 HDU 3549 Flow Problem 题目:pid=3549">http://acm.hdu.edu.cn/showproblem.php?pid=3549 用增广路算法 ...
- hdu 3549 Flow Problem (网络最大流)
Flow Problem Time Limit: 5000/5000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Tota ...
- Flow Problem HDU - 3549
Flow Problem HDU - 3549 Network flow is a well-known difficult problem for ACMers. Given a graph, yo ...
- Redraw Beautiful Drawings(hdu4888)网络流+最大流
Redraw Beautiful Drawings Time Limit: 3000/1500 MS (Java/Others) Memory Limit: 65536/65536 K (Java/O ...
随机推荐
- pytest_1安装和启动
一.安装和启动 1.1 安装pytest 1. 键入Ctrl+R,打开cmd,输入命令至python环境下(本机:D:\Python27>) 2. 在python环境下运行下面的命令即可安装py ...
- jeecms v9图标不显示问题
- Capabilities 入门教程:基础实战篇
该系列文章总共分为三篇: Linux Capabilities 入门教程:概念篇 Linux Capabilities 入门教程:基础实战篇 待续... 上篇文章介绍了 Linux capabilit ...
- LeetCode.942-DI字符串匹配(DI String Match)
这是悦乐书的第361次更新,第388篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第223题(顺位题号是942).给定仅包含I(增加)或D(减少)的字符串S,令N = S ...
- hadop-eclipse-plugin导入plugins后没有mapreduce视图
这种现象一般由于安装在eclipse\plugins下的插件没有导入的问题. 解决方法:把 eclipse\configuration\org.eclipse.update 删除掉.出现这种情况的原因 ...
- 利用python求非线性方程
最近在做的东西中有一件任务,相当于一个函数已知y来求x,网上找了各种办法最终得以实现.在此说明方法,并记录一些坑. 要求的函数比如:log(x) - log(1-x) + 2.2 * (1 -2x) ...
- 【VS开发】【智能语音处理】VS中声音的采集实现
vc中声音的采集是用api函数来实现的. 一.数字音频基础知识 Fourier级数: 任何周期的波形可以分解成多个正弦波,这些正弦波的频率都是整数倍.级数中其他正线波的频率是基础频率的整数倍.基础 ...
- python 并发编程 多进程 生产者消费者模型介绍
一 生产者消费者模型介绍 为什么要使用生产者消费者模型 生产者指的是生产数据的任务,消费者指的是处理数据的任务, 生产数据目的,是为了给消费者处理. 在并发编程中,如果生产者处理速度很快,而消费者处理 ...
- tableau desktop
参考: 入门指南: https://help.tableau.com/current/guides/get-started-tutorial/zh-cn/get-started-tutorial-co ...
- [转帖]RSA算法与DSA算法的区别
RSA算法与DSA算法的区别 https://cloud.tencent.com/developer/news/254061 文章来源:企鹅号 - SuperFullStack 本文译自:StackE ...