题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1532

题目大意是:农夫约翰要把多个小池塘的水通过池塘间连接的水渠排出去,从池塘1到池塘M最多可以排多少的水流量,给定水渠和连接的两个小池塘,以及该水渠的流量,求最大流。

其实就是裸的最大流,源点是1号池塘,汇点是M号池塘,从1到M做一个dinic算法求出最大流就行,但是我一直WA,怎么也改不对,后来发现是因为自己喜欢用vector建边建图的原因,对于输入多组样例时,没有初始化上组样例的vector数组的数据,导致tle,wa各种错误,找了一个多小时才发现!下次记得要用clear()函数清除vector数组中的数据。

AC代码:

#include<iostream>
#include<stack>
#include<algorithm>
#include<cstring>
#include<queue>
using namespace std;
const int Ni = 205;
const int MAX = 0x3f3f3f3f; struct node{
vector<int> vex;//某个节点连接的点
vector<int> num;//连接节点边的序号
}g[Ni];
struct edge{
int u,v,c;//u起点,v终点,c流量
}e[Ni*Ni];
int d[Ni];//深度
int N,M;
int edgenum = 0;//边的序号从0开始,
void addedge(int u,int v,int c){
e[edgenum].u = u;
e[edgenum].v = v;
e[edgenum].c = c;
g[u].vex.push_back(v);
g[u].num.push_back(edgenum++);
e[edgenum].u = v;
e[edgenum].v = u;
e[edgenum].c = 0;
g[v].num.push_back(edgenum++);
g[v].vex.push_back(u);
} int bfs(){
memset(d,-1,sizeof(d));
queue<int> q;
q.push(1);
d[1] = 0;
while(!q.empty()){
int cur = q.front() ;
q.pop() ;
for(int i = 0;i<g[cur].vex.size() ;i++ ){
int now = g[cur].vex[i];
int te = g[cur].num[i];
if(d[now] == -1 && e[te].c > 0 ){//如果now没有访问过,且该边流量大于0
d[now] = d[cur] + 1;//增加深度
q.push(now);
}
}
}
return d[M]!=-1;
} int dfs(int a,int b){
int r = 0; if(a == M){
return b;
} for(int i = 0;i<g[a].vex.size() && r<b ;i++ ){
int u = g[a].vex[i];
int te = g[a].num[i];
if(e[te].c > 0 && d[u] == d[a] + 1 ){
int t = min(e[te].c,b - r);//求出可以流过的流量
t = dfs(u,t);//递归寻找增广路
r+=t;
e[te].c-=t;
e[te^1].c+=t;
}
}
if(!r){
d[a] = -2;
}
return r;
} int dinic(int sp,int tp){
int total = 0,t;
while(bfs()){
while(1){
t = dfs(sp,MAX);
if(!t){//找不到增广路,t=0,循环终止
break;
}
total+=t;
}
}
return total;
} int main(){
while(~scanf("%d%d",&N,&M)){
for(int i = 0;i<N;i++){
int u,v,C;
scanf("%d%d%d",&u,&v,&C);
addedge(u,v,C);
}
printf("%d\n",dinic(1,M));
for(int i = 1;i<=M;i++){//!!!while输入多组样例,一定要清空vector数组内的数据!
g[i].num.clear() ;
g[i].vex.clear() ;
}
}
return 0;
}

hdu 1532 Drainage Ditches(网络流)的更多相关文章

  1. HDU 1532 Drainage Ditches(网络流模板题)

    题目大意:就是由于下大雨的时候约翰的农场就会被雨水给淹没,无奈下约翰不得不修建水沟,而且是网络水沟,并且聪明的约翰还控制了水的流速, 本题就是让你求出最大流速,无疑要运用到求最大流了.题中m为水沟数, ...

  2. HDU 1532 Drainage Ditches (网络流)

    A - Drainage Ditches Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64 ...

  3. HDU 1532 Drainage Ditches (最大网络流)

    Drainage Ditches Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) To ...

  4. 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) ...

  5. HDU 1532 Drainage Ditches(最大流 EK算法)

    题目网址:http://acm.hdu.edu.cn/showproblem.php?pid=1532 思路: 网络流最大流的入门题,直接套模板即可~ 注意坑点是:有重边!!读数据的时候要用“+=”替 ...

  6. POJ 1273 || HDU 1532 Drainage Ditches (最大流模型)

    Drainage DitchesHal Burch Time Limit 1000 ms Memory Limit 65536 kb description Every time it rains o ...

  7. poj 1273 && hdu 1532 Drainage Ditches (网络最大流)

    Drainage Ditches Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 53640   Accepted: 2044 ...

  8. hdu 1532 Drainage Ditches(最大流)

                                                                                            Drainage Dit ...

  9. hdu 1532 Drainage Ditches(最大流模板题)

    Drainage Ditches Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

随机推荐

  1. php函数的巧妙应用

    直接切入正题: 1.extract();函数从数组中把变量导入到当前的符号表中 对于数组中的每个元素,键名用于变量名,键值用于变量值. 第二个参数 type 用于指定当某个变量已经存在,而数组中又有同 ...

  2. Docker最全教程——从理论到实战(十八)

    前言 VS Code是一个年轻的编辑器,但是确实是非常犀利.通过本篇,老司机带你使用VS Code玩转Docker——相信阅读本篇之后,无论是初学者还是老手,都可以非常方便的玩转Docker了!所谓是 ...

  3. unity踩坑2020-01-21

    这几天一直在测试一个类似于传奇的2d界面游戏,目前做的测试为: 人物动作响应,主要是8方向的判断和资源文件精灵的刷新. 学到的知识点: 1,Enum.GetHashCode() 可以得到这个枚举的索引 ...

  4. pycharm+anaconda在Mac上的配置方法 2019.11.29

    内心os: 听人说,写blog是加分项,那他就不是浪费时间的事儿了呗 毕竟自己菜还是留下来东西来自己欣赏吧 Mac小电脑上进行python数据开发环境的配置 首先下载Anaconda,一个超好用的数据 ...

  5. 【Unity|C#】基础篇(16)——文件读写(I/O类)

    [笔记] 文件操作 File / FileInfo / FileStream https://www.runoob.com/csharp/csharp-file-io.html 文本读写 Stream ...

  6. 函数节流-歪说js

    歪谈js 起因: 夜深人静,月朗星稀.'window.onresize 事件' 与 '浏览器'在大战300回合,console.log('1') 1s 十次,然后就结束了,一个悲伤的故事. 事实证明太 ...

  7. windows 环境变量%SystemDrive%和%SystemRoot%、%AppData%、%LocalAppData%、%TEMP% 等简写

    windows 环境变量%SystemDrive% 和%SystemRoot%.%AppData%.%LocalAppData%.%TEMP% 等简写 假设操作系统安装在 C: 盘 %SYSTEMRO ...

  8. mysql中获取本月第一天、本月最后一天、上月第一天、上月最后一天等等

    转自: https://blog.csdn.net/min996358312/article/details/61420462 1.当函数使用时,即interval(),为比较函数,如:interva ...

  9. ubantu安装apache

    1.命令安装: sudo apt install apache2 2.检查是否启动了Apache服务 systemctl status apache2 3.开启.关闭和重启服务器 /etc/init. ...

  10. form表单jquery提交400错误

    今天在用jquery提交form表单的时候出现了一个奇怪的400错误,最后发现原因是因为使用了元素选择器来选择form表单,$('form'),使用这种方式导致了某些参数提交不上去,参数匹配不上于是s ...