博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU-1532 Drainage Ditches,人生第一道网络流!
阅读量:5296 次
发布时间:2019-06-14

本文共 1254 字,大约阅读时间需要 4 分钟。

                                                    

   自己拉的专题里面没有这题,网上找博客学习网络流的时候看到闯亮学长的博客然后看到这个网络流入门题!随手一敲WA了几发看讨论区才发现坑点!

   本题采用的是Edmonds-Karp算法求增广路。小白书上只介绍了这个算法,确实对于数据不刁钻的题目这个算法足以应对。大白书上的Dinic及SAP、ISAP还没有去看,以后慢慢攻克吧!

   回到这个题:n条水渠,m个交点,每条水渠有一个最大容量cap,求1号交点到m号交点的最大流。

   学了EK算法这题就可以裸引用了,只是注意一个坑点:重边的时候既不是取最大、也不是取最小,而是+= 

int a[N],p[N],flow[N][N],cap[N][N];int n,m;void init(){    memset(flow,0,sizeof(flow));//流量,初始设为0    memset(cap,0,sizeof(cap));//容量,开始为0表示这条通道不存在}void EK(){//    memset(p,0,sizeof(p));    queue
q; ll f=0;//最大流 while(1) { memset(a,0,sizeof(a)); a[1]=INF; q.push(1); while(!q.empty()) { int u=q.front(); q.pop(); for(int v=1; v<=m; v++) if(!a[v]&&cap[u][v]>flow[u][v]) { p[v]=u; q.push(v); a[v]=min(a[u],cap[u][v]-flow[u][v]); } } if(!a[m]) break; for(int i=m; i!=1; i=p[i]) { flow[p[i]][i]+=a[m]; flow[i][p[i]]-=a[m]; } f+=a[m]; } printf("%I64d\n",f);}int main(){ while(~scanf("%d%d",&n,&m)) { init(); int s,t,e; for(int i=0; i

 

     给出闯亮学长的博客,写的很好,很适合初学者:



转载于:https://www.cnblogs.com/nyist-TC-LYQ/p/7208096.html

你可能感兴趣的文章
安卓当中的线程和每秒刷一次
查看>>
随机颜色值
查看>>
每日一库:Modernizr.js,es5-shim.js,es5-safe.js
查看>>
目录相关的操作
查看>>
C++----练习--引用头文件
查看>>
ajax连接服务器框架
查看>>
wpf样式绑定 行为绑定 事件关联 路由事件实例
查看>>
利用maven管理项目之POM文件配置
查看>>
FUSE-用户空间文件系统
查看>>
 VS2012 C#调用C++ dll
查看>>
TCL:表格(xls)中写入数据
查看>>
Oracle事务
查看>>
String类中的equals方法总结(转载)
查看>>
图片问题
查看>>
bash使用规则
查看>>
AVL数
查看>>
C语言程序设计II—第九周教学
查看>>
全栈12期的崛起之捡点儿有用的说说
查看>>
基础类型
查看>>
属性动画
查看>>