网络流/二分图总结(二)
上一篇:网络流/二分图总结
上一篇是最基础的代码实现,这次补充一点,顺便总结一下进来做过的网络流题目。
一些算法
最大权闭合图
详见胡伯涛论文,将S与正权点相连,流量为点的权值,将负权点与T相连,流量为改点权值的绝对值。将原图的有向边替换为流量为INF的边,求最小割即最大权。
题目:NOI2006最大获利
二分图最小点权覆盖
连S与左边的点,连T到右边的点,流量为点的权值,二分图原来的边换为流量为INF的边,最小割=最小点权覆盖的权值
二分图最大点权独立集
权和-最小点权覆盖。和上面的关系就像二分图独立数和最小覆盖数的关系,不过多了权值,就要转换为最大流求解了。
一些题目
1.传纸条/方格取数
2.TYVJ 1338
二分图最大点权覆盖。
代码:http://fayaa.com/code/view/20890/
3.HDU 1569
方格取数,给出方格,不能取相邻的边的数,求最大能取得和。经典问题,二分图最大点权覆盖,上一题基本就是这个经典问题改编的。但是我调试不出来,因为HDU交一些Pascal程序上去总是编译失败,所以这题是用C写的,而且时隔一个月还参考了别人的代码,细节和语言和上一道不同,有点难查错,目前是WA。具体的写在代码注释里
代码:http://fayaa.com/code/view/20891/
3.RQNOJ 77
给出一个带权的无向连通图,要求去掉一些边,使其存在两个点不再连通,求最小的边的权值和。即求无向图全局最小割。可以枚举源点与汇点,找最小割。实际仅需固定源点,枚举汇点就行了。
代码:http://fayaa.com/code/view/20892/
存在Stoer-Wagner 算法,在该问题上有一个优雅的解法,但是应用面太狭窄,就没有深入了解。有兴趣的可以看
http://www.cppblog.com/imky/articles/123427.html
http://www.rqnoj.cn/Discuss_Show.asp?DID=4234
4.RQNOJ 306
题意:输油管道为无向流图,且工作在最大流条件下,每条管道有一个抗压指数,当石油的流量超过这个数管道就会爆炸。某组织能使一条管道的抗压指数下降1。求让哪些管道的抗压指数下降,一定可以摧毁发烂稀国的石油运输网络。
算法:来自RQNOJ题解:跑一遍最大流,在残量网络中作传递闭包,输出所有连接状态不同的两个顶点的边,不能求饱和弧,因为可能会绕一圈后还是最大流,输入的边是无向边。
代码:http://fayaa.com/code/view/20893/
5.POJ 2135
http://www.cnblogs.com/oa414/archive/2011/06/05/2073294.html
6.POJ 3469
构图太奇妙了!
http://hi.baidu.com/legend_ni/blog/item/6cef550694bca810738da5d2.html
http://hi.baidu.com/%D2%D5%C1%D6010/blog/item/90b649cc7b47045c0eb3454d.html
代码:http://fayaa.com/code/view/20895/
7.HDU 3046
喜羊羊和灰太狼……
给出方格,羊和狼的位置,羊要筑墙围住自己,求最小的墙的长度。
算法:狼连源点,羊连汇点,相邻方格连代价为1的边,求最小割
代码是PASCAL的,仅过了样例,HDU上编译失败
代码:http://fayaa.com/code/view/20896/
一点废话
还以为自己做了不少网络流的题目,没想到那么少。好几个星期没写,前几天重新拿起的时候写个sap之类的都要翻原来的程序。还有不少题目是WA的,没有十分明白的,还没拿上来。另外,想学习一下dinic、预流推进等算法,顺便把EK也复习一下,费用流的什么zkw算法、消圈算法也想了解下,另外KM还是没有完全弄懂。这一段时间会把这些尽量完成,并找些网络流/二分图的题目来做,届时会写出第三篇总结。