hdu 1532 Drainage Ditches (最大流)
最大流的第一道题,刚开始学这玩意儿,感觉好难啊!哎·····
希望慢慢地能够理解一点吧!
#include<stdio.h>
#include<string.h>
#include<queue>
using namespace std;
#define inf 1000000
#define min(a,b) a<b?a:b
int map[210][210],pre[210],maxf[210];
int n,m;
int bfs()//搜索,截止找不到增广路
{
int i;
queue<int>q;
for(i=0;i<=m;i++)
{
maxf[i]=inf;
pre[i]=-1;
}
pre[1]=0;
q.push(1);
while(!q.empty())
{
int qian=q.front();
q.pop();
int hou;
for(hou=1;hou<=m;hou++)
{
if(map[qian][hou]&&pre[hou]==-1)
{
pre[hou]=qian;
maxf[hou]=min(maxf[qian],map[qian][hou]);
q.push(hou);
}
}
}
if(pre[m]==-1)return 0;
return maxf[m];
}
int ek()//更新与修复
{
int max=0,kejia;
while(kejia=bfs())
{
max+=kejia;
int index=m,qian;
while(index!=1)
{
qian=pre[index];
map[qian][index]-=kejia;
map[index][qian]+=kejia;
index=qian;
}
}
return max;
}
int main()
{
int i,u,v,w,ans;
while(scanf("%d%d",&n,&m)!=EOF)
{
memset(map,0,sizeof(map));
for(i=0;i<n;i++)
{
scanf("%d%d%d",&u,&v,&w);
map[u][v]+=w;
}
ans=ek();
printf("%d\n",ans);
}
return 0;
}
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1532
网络流 定义:流网络G(V,E)是一个V有向图,其中S为源点,T为汇点。 定义:C(u,v)为u到v的容量
,其中对于每条边(u,v)∈E,有C(u,v)≥0。否则C(u,v)=0。
定义:(u,v)为u到v的流量,对所有u,v∈V, 有f(u,v)≤c(u,v)。∑f(u,v)称作网络的流
记作
f(S,T) 定义:max(∑f(u,v))=max(f(S,T))为网络的最大流量。记住|f(s,t)|
残留网络
定义:Cf(u,v)为u到v的残留容量, Cf(u,v)=C(u,v)-f(u,v)。
定义:残留网络Ef={(u,v)∈VXV,Cf(u,v)}石油残留边组成的网络。
定义:增广路径是起点为S,终点为T的一组边集,其中Cf(p)=min{cf(u,v):(u,v)∈p}称为增广路径的容量。
最大流最小割定义:割(S,T)将网络分成两部分,割得流等于∑c(u,v) ,(u∈S,v∈T) 记作c(S,T)。
明显f(S,T)≤c(S,T),我们以后用c(S,T) 表达最小割。
定理:若残留网络中不存在增广路,则当前流为最大流
定理:最大流等于最小割
证明:
假设残留图
Gf
不存在增广路径,根据以下规则划分两个点集合S={v∈V:Gf 存在从s到v的路径}
T={v∈V:v∉S}
因为Gf不存在增广路,所以t ∉S, 对顶点u,v, 若u∈S,f(u,v)=c(u,v),则v属于T,否则v属于S,
此时f(S,T)=C(S,T),
f(S,T)<=C(S,T) 所以f(S,T)为最大流,此时残留图中无增广路
hdu 1532 Drainage Ditches (最大流)的更多相关文章
- POJ 1273 || HDU 1532 Drainage Ditches (最大流模型)
Drainage DitchesHal Burch Time Limit 1000 ms Memory Limit 65536 kb description Every time it rains o ...
- hdu 1532 Drainage Ditches(最大流)
Drainage Dit ...
- HDU 1532 Drainage Ditches(最大流 EK算法)
题目网址:http://acm.hdu.edu.cn/showproblem.php?pid=1532 思路: 网络流最大流的入门题,直接套模板即可~ 注意坑点是:有重边!!读数据的时候要用“+=”替 ...
- HDU 1532 Drainage Ditches 最大流 (Edmonds_Karp)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1532 感觉题意不清楚,不知道是不是个人英语水平问题.本来还以为需要维护入度和出度来找源点和汇点呢,看 ...
- poj 1273 && hdu 1532 Drainage Ditches (网络最大流)
Drainage Ditches Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 53640 Accepted: 2044 ...
- hdu 1532 Drainage Ditches(最大流模板题)
Drainage Ditches Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- HDU 1532 Drainage Ditches (网络流)
A - Drainage Ditches Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64 ...
- HDU 1532 Drainage Ditches 分类: Brush Mode 2014-07-31 10:38 82人阅读 评论(0) 收藏
Drainage Ditches Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- HDU 1532 Drainage Ditches (最大网络流)
Drainage Ditches Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other) To ...
随机推荐
- ActiveMQ-如何使用JMS API?
JMS编程模型 JMS定义了Java中访问消息中间件的一组接口,主要包括ConnectionFactory.Connection.Session.Destination.MessageProducer ...
- java图片转byte转string
第一种:原始乱码: public static void main(String[] args) throws IOException { File imgFile = new File(" ...
- HDU 2102 A计划(BFS)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2102 题目大意:公主被关在一个两层的迷宫里,迷宫的入口是S(0,0,0),公主的位置用P表示,时空传输 ...
- spring源码分析---IOC(1)
我们都知道spring有2个最重要的概念,IOC(控制反转)和AOP(依赖注入).今天我就分享一下spring源码的IOC. IOC的定义:直观的来说,就是由spring来负责控制对象的生命周期和对象 ...
- OpenSSL 给自己颁发根证书,由根证书签发下级证书的步骤。
1.建立根证书 (1)生成私钥 openssl genrsa -des3 -out CAroot.key 2048.产生一个2048位的私钥,在安装的openssl目录下调用openssl命令. 需要 ...
- IEEEXtreme 9.0 - Digit Fun!
博客中的文章均为 meelo 原创,请务必以链接形式注明 本文地址 Xtreme 9.0 - Digit Fun! 题目来源:第9届IEEE极限编程大赛第1题 Recurrence relations ...
- Python爬虫-urllib的基本用法
from urllib import response,request,parse,error from http import cookiejar if __name__ == '__main__' ...
- ThinkPHP3.2.3 PHPExcel读取excel插入数据库
版本 ThinkPHP3.2.3 下载PHPExcel 将这两个文件放到并更改名字 excel文件: 数据库表: CREATE TABLE `sh_name` ( `name` varchar(255 ...
- (14) go 结构体
1. 声明一个结构体 2.属性 如果是 指针 切片 map 需要用make 3.赋值 (2) (3) (4) 4. 正确,字段相同,数据类型相同,名字相同 5.
- BNUOJ 52516 Just A String
$KMP$. 枚举每一个后缀,去原串中进行匹配,每次匹配到原串到$i$位置的后缀与这次枚举的后缀的前缀,更新答案. #include<bits/stdc++.h> using namesp ...