摘要: 首先黑点和白点是组成一个二分图这毫无疑问关键是题目中要求的所有黑白配的线不能交叉。。。一开始我也没想到这个怎么转化为二分图里面的算法。后来看书才知道,如果两两交叉,则可以把两根线当四边形的对角线,连四边形的两条边,则肯定不交叉,而且一个很明显的特征是,不交叉的两条线的他们的长度和 一定比交叉线的长度... 阅读全文
posted @ 2014-06-04 22:18 KRisen 阅读(265) 评论(0) 推荐(0) 编辑
摘要: 一开始还没看懂这个算法,后来看了陶叔去年的PPT的实例演示才弄懂用一个lx[]和ly[]来记录X和Y集合中点的权值,有个定理是 lx[i]+ly[j]==w[i][j](边权值) 则该点是最佳匹配,因为首先 那个不等式肯定要>=的,否则就不满足题意了,如果是>则可以去匹配更有价值的边或者把权值降下来... 阅读全文
posted @ 2014-06-04 22:12 KRisen 阅读(233) 评论(0) 推荐(0) 编辑
摘要: 求无向图中能覆盖每个点的最小覆盖数 单独的点也算一条路径这个还是可以扯到最大匹配数来,原因跟上面的最大独立集一样,如果某个二分图(注意不是DAG上的)的边是最大匹配边,那说明只要取两个端点只要一条边即可。故最小覆盖数还是 顶点数-最大匹配数根据DAG建图的时候,就是DAG有边就给对应的端点建边#in... 阅读全文
posted @ 2014-06-04 22:03 KRisen 阅读(212) 评论(0) 推荐(0) 编辑
摘要: 这是经典的最大点独立集还是可以转化成最大匹配数,为什么呢,因为求出最大匹配数之和,匹配的边的两个端点互斥,只能去一个,所以最后结果就用总点数-最大匹配数即可#include #include #include #include using namespace std;int h[600],sex[6... 阅读全文
posted @ 2014-06-04 21:59 KRisen 阅读(167) 评论(0) 推荐(0) 编辑
摘要: 这个最小覆盖但不同于 POJ 3041,只有横或者竖方向连通的点能用一块板子覆盖,非连续的,就要用多块所以用类似并查集方法,分别横向与竖向缩点,有交集的地方就连通,再走一遍最大匹配即可一开始还有点没想清楚缩点怎么写,其实就是横向和竖向分别缩一下,不要混在一起,否则很麻烦,要注意一下#include ... 阅读全文
posted @ 2014-06-04 21:53 KRisen 阅读(365) 评论(0) 推荐(0) 编辑
摘要: 最大匹配数就等于最大点覆盖,因为在图里面,凡是要覆盖的点必定是连通的,而最大匹配之后,若还有点没有覆盖到,则必定有新的匹配,与最大匹配数矛盾,如果去掉一些匹配,则必定有点没有覆盖到。POJ 1469比较简单,用的经典的二分图匹配算法。#include #include #include #inclu... 阅读全文
posted @ 2014-06-04 21:49 KRisen 阅读(228) 评论(0) 推荐(0) 编辑