学习了一些常用建图方法,又理解了一遍二分,感觉更加清晰了。
1.行列匹配法;在一个矩阵中,加入上面一些点有人,现在有一些箭能将一行或一列的人杀死,问最少需要多少箭?
因为箭要最少,所以要尽可能的在一行或一列上,即最小顶点覆盖问题。这时可以通过行列来进行二分匹配;假如位置(1,1),(1,3),(2,2),
(3,1) 则横坐标1 2 3,纵坐标 1 2 3间有一定的关系,最小点覆盖=最大匹配数;
2.反建法;假如有一个嫉妒封建的老师,他不希望同学间发生恋情。老师发现,满足一下条件的同学发生恋情的几率小:
1》身高差〉40 2》性别相同 3》爱好不同的音乐4》爱好同类型的运动;由于相同性别的同学不可能发生恋情,所以就成了男生和女生间的关系;
由于正面直接求答案可能有误,可以先求出能发生恋情的可能,把有上面任一条件的男女连一条边,然后一减就是答案了;
3.拆点法;拆点法适用于解决最小路径覆盖问题;给出一张图,需要找到一些路径,可以把所有的点都经过,并且路径不产生交叉。这时可以把点1拆为x1,y1、
点2拆为x2,y2.........;这时求二分图最大匹配,可以得到每个匹配对应一个路径覆盖,将2个点连在一起,最后所有点减去匹配数(即相连的点只要一条既可)就是
最小路径覆盖数;最小路径覆盖=最大独立集
最小路径覆盖:假如有一张图,用尽可能的路径把所有的点经历一遍。hdu4160;
4:一行变多行,一列变多列;如第一种题目一样,不能再同一行或列有点,但是现在增加了墙,某一行多了一个墙,那么这一行就成了2行;用这种方法既可;
5:黑白染色法;一张图中有一些点,现在要用1*2的长条去覆盖这些点,问至少需要多少;我是这样理解的:,先对每个能放的点标号,对于每个点,如果他的上下左右能够放
长条,那么就从该点到其方向上的点连一条边,这样建图就完成了;求一次最大匹配既可;