zoukankan      html  css  js  c++  java
  • 二分图匹配学习记录

    导读:重新系统的学习了二分图匹配,感觉面对图论题又有了底气。

    (资料来源:http://wenku.baidu.com/link?url=AdT8Ftpj14qoiwS4Ey-DzJCiNVu6VTzWOxsWjcXuNBuCboGXMf67w8QNedjL2ECWCbQDZpu7-uwopB2KGreoNk65hOsEgNj7uyRmeHaP0f7)

    几个概念:

    1.最大独立集:一个二分图中最大的一个点集,该点集中每个点互不相连。

    2.最小顶点覆盖:在二分图中,用最少的点,让所有边都与至少一个点有关联。

    3.最小路径覆盖:一个不含圈的有向图G中,G的一个路径覆盖是一个其节点不相交的路径集合P,图中的每一个节点仅包含于一条路径。

    二分图常见建图模型:

    1.行列匹配法

    1 0 1
    0 1 0
    1 0 0

     

     

    一个3*3的矩阵,1表示这个地方有敌人,0表示没有敌人。我们可以通过射箭消灭这个位置的敌人。且一根箭可以消灭一行或一列的敌人,问至少需要几根箭。

    这题可以运用行列匹配法。我们用敌人坐标的横纵坐标作为点进行匹配。显然,我们只要做一个最小顶点覆盖即可。这里用到二分图的最小顶点覆盖等于其最大匹配。

    2.黑白染色法

    1 0 1
    1 1 1
    0 0 1

     

     

    1代表格子为黑色,0代表各自为白色。每次最多只能修改相邻的两个1。问最少需要修改几次?

    这题乍一看也和二分图匹配没啥关系。但我们可以运用染色的方法。将原本一样的点变成二分图。

    白1 白5
    黑2 白3 黑4