网络流
无敌大饺子
这个作者很懒,什么都没留下…
展开
-
POJ 1273 Drainage Ditches(最大流入门题)
里面可能有重边 可以把重边全部加在一起就可以了,用的是EK算法. #include #include #include #include using namespace std; #define INF 0X50505050 const int maxn = 205; int g[maxn][maxn], fa[maxn], n, m; bool vis[maxn]; bool b原创 2013-05-02 15:35:18 · 558 阅读 · 0 评论 -
ZOJ 2760 How Many Shortest Path(floyd+最大流)
刚开始还屁颠屁颠的找出最短路,删除所有最短路上的边,然后继续找,WA到死. 看了题解才知道要用最大流,网络流思想很奇妙. 找到最路径中用到的边,将边的容量赋值为1,这么流过去,从起点到终点流这样一条流过去就可以保证为一条最短路径而且没有重复边。 现在的题目转化为找最短路路径中用到边。 这样的边有这样的性质:Path(s,i)+E(i,j)+Path(j,t)==Path(s原创 2013-05-02 16:14:04 · 573 阅读 · 0 评论 -
ZOJ 3362 Beer Problem(最小费用最大流)
看了报告才写出来的. 添加一个汇点,把所有非源点城市添加一条边到汇点,容量为无穷大,代价为负的该城市的单价(巧妙的转换). 然后就是无向图的最小费用最大流问题了,最后把答案取反. #include #include #include #define INF 0X20202020 using namespace std; const int maxn = 110; struct edge原创 2013-05-06 18:09:45 · 590 阅读 · 0 评论 -
ZOJ 1992 Sightseeing Tour(混合图欧拉回路)
关于混合图欧拉回路可以参考这篇文章: http://blog.csdn.net/xsbailong/article/details/6965443 #include #include #include #include #include using namespace std; const int maxn = 2010; int ind[205], oud[205], fa[2原创 2013-05-07 11:36:11 · 463 阅读 · 0 评论 -
ZOJ 1525 Air Raid(最小路径覆盖)
最小路径覆盖 = 顶点数 - 最大匹配数. 关于hungary算法可以参考http://imlazy.ycool.com/post.1603708.html 什么是二分图,什么是二分图的最大匹配,这些定义我就不讲了,网上随便都找得到。二分图的最大匹配有两种求法,第一种是最大流(我在此假设读者已有网络流的知识);第二种就是我现在要讲的匈牙利算法。这个算法说白了就是最大流的算法,但是它跟据原创 2013-05-07 21:05:01 · 484 阅读 · 0 评论 -
ZOJ 1654 Place the Robots(二分图最大匹配)
具体建图思路,是把一有墙隔着的行或列转换成多行或多列,然后建立行和列之间二分图,最后匈牙利算法, 好文章:http://wenku.baidu.com/view/ab32abbec77da26925c5b0f2.html #include #include #include using namespace std; const int maxn = 51; struct edge{ i原创 2013-05-08 17:53:10 · 525 阅读 · 0 评论 -
ZOJ 2404 Going Home(最小费用最大流)
对人和房子建边容量为1,权值为距离,房子到人权值为距离取反,然后设一个超级源点和人连边,容量为1,权值为0,设一个超级汇点,连接房子到超级汇点,容量为1,权值为0. 然后EK+spfa求最小费用最大流 总是忘了把反向边权值取负. #include #include #include #include #include using namespace std; const int m原创 2013-05-13 16:58:32 · 655 阅读 · 0 评论