不错的题目,看了别人的解体报告才会,膜拜大牛!
http://hi.baidu.com/saintlleo/blog/item/ab5e6b1b65f538c5a7866906.html
把男女分为左右两个集合,如果男a喜欢女b,a向b连一条边,对于题目给的完美匹配,女b向男a连一条边
然后求强连通分量,如果一个男的和某些女的在一个强连通分量中,他们可以结婚,注意,女的要在男人喜欢的名单中找,可能有一些男女在同一个连通分量中,但是男的不喜欢女的
如果某些男女在一个强连通分量中 ,那么这个强连通分量中肯定会出现环,且环中顶点个数是偶数,都是一男对应一女的出现,这个环中的任何一个男的可以与任何一个女的结婚,且不会导致有些男的不能结婚
于是,可以像二分匹配中找增广路那样去找交错轨,从一开始的初始匹配开始找,且交错轨首尾相连,最后形成一个环,即找强连通分量
代码: