2013年4月9日

POJ 1469 ZOJ 1140 Courses 二分图匹配

摘要: 继续匈牙利二分匹配,其实我都不知道怎样写匈牙利算法,只是记住了可以这样写,悲哀啊唉````裸的二分匹配,贴代码:View Code 1 #include <cstdio> 2 #include <cstring> 3 #define MAXC 105 4 #define MAXS 305 5 bool g[MAXC][MAXS]; 6 bool used[MAXS]; 7 int p,n; 8 int xx[MAXC],yy[MAXS]; 9 void init()10 {11 int i,j;12 scanf("%d%d",&p,& 阅读全文

posted @ 2013-04-09 22:39 allh123 阅读(214) 评论(0) 推荐(0) 编辑

Zoj 1364 Poj 1325 Machine Schedule 二分图匹配 匈牙利算法 求点覆盖数等价于求匹配数

摘要: 这题就是A机器有n 种模式,B机器有m种模式一共有k件任务,每件任务既可在A机器的某个模式下完成,也可以在B机器的某个模式下完成。由于机器转换模式要重启,求重启的最少次数,两机器最初的模式是0所以如果某任务可以在A机器或者B 机器的0模式下进行,这件任务就可以不考虑。把A,B机器的每个模式看成顶点。如果某任务可以在A机器的模式i 和B机器的模式j下完成,那么i和j 建一条边,该题可转换为找最小的顶点数,覆盖掉所有出现的边(相当于完成了所有的工作)。而有定理,点覆盖数 = 匹配数,所以,把按如上方式构造出的图求一个最大匹配,其匹配数就是所求,记住去掉所有可以用0模式完成的工作(这些工作不用建边) 阅读全文

posted @ 2013-04-09 21:20 allh123 阅读(117) 评论(0) 推荐(0) 编辑

ZOJ 1654 匈牙利算法 二分图匹配 Place the Robots

摘要: 给每行上的空地编不同号,就算在同一行上,但是被墙壁隔开了的话也编不同的号,一个编号对应一个顶点,这样的顶点放在集合XI中。给每列上的空地编不同号,就算在同一行上,但是被墙壁隔开了的话也编不同的号,一个编号对应一个顶点,这样的顶点放在集合YI中。如果XI中的某个顶点i和YI中的某个顶点j是在同一个空地上,那么i和j有一条边相连。通过如上方法构造出一个二部图(也叫二分图),然后用匈牙利算法做最大二部图匹配,就OK了,我是通过DFS寻找增广路。贴代码:View Code 1 #include <cstdio> 2 #include <cstring> 3 #define MA 阅读全文

posted @ 2013-04-09 20:17 allh123 阅读(141) 评论(0) 推荐(0) 编辑

POJ 1459 ZOJ 1734 Power Network dinic 算法 网络流

摘要: 裸的网络流,就是在读数据的时候,注意用while(getchar()!='(');scanf("%d,%d),%d");然后增加超源点与超收点。我是用dinic算法,速度慢,跑了549貌似ms,貌似,希望能优化,用个什么预流推进算法试试啊。在纠结了很久后,终于在书上把预流推进算法抄下来了,哈哈,调试了很久,一直陷入死循环,后来一看输入文件不是这个题的输入,想shi啊,有木有贴代码 dinic 算法 :View Code 1 #include <cstdio> 2 #include <cstring> 3 #define MAXN 10 阅读全文

posted @ 2013-04-09 15:43 allh123 阅读(173) 评论(0) 推荐(0) 编辑

POJ 2112 Optimal Milking dinic算法 网络流+二分

摘要: 思路就是先用floyd算出奶牛到挤奶器的最短距离,然后二分查找最大距离的最小值,构造出满足任何奶牛到挤奶器的距离都小于该最小值的网络流,求一个最大流,如果该值等于奶牛的数目,就是可行方案,然后最小值还可以少点,如果不可行,最小值得增大。加入超源点与超收点,超源点到每头奶牛建边,容量为1,每个挤奶器到超收点建边,容量为m。其实这题用二分匹配判可行会更好。求网络的最大流用的是dinic算法,不太理解,抄的书上的代码。以下为代码:View Code 1 #include <cstdio> 2 #include <cstring> 3 #define INF 300000000 阅读全文

posted @ 2013-04-09 13:22 allh123 阅读(216) 评论(0) 推荐(0) 编辑

导航