• 匈牙利算法


    推荐blog1

    推荐blog2

    值得一看(就看上面两篇吧,这篇是仿照上面两篇写的,连图都不是自己的)

    这是本蒟蒻的第一篇blog,我知道很差,请不要吐槽啦

    (图片来源于推荐博客2)

    图中每一条连线代表这两个boy girl有好感,只有有连线的boy girl才可能匹配

    每个boy只能匹配一个girl,每个girl也只能匹配一个boy

    若每个boy都能有自己的girl,称为完美匹配

    让boy与girl的匹配对数最大的,称为最大匹配

    现在,我们的任务是要求这些有连线的boy girl的最大匹配数,这就是匈牙利算法的用处

    (图片来源于推荐博客2)

    就如现在,从B1看起,发现他与G2有暧昧,就将他俩暂时牵红绳。

    但接着看B2,发现他与G2也有暧昧,于是B1与G2分手,B2 G2在一起,再回到B1,还好他与G4也有暧昧,于是将他俩搞在一起(这其实是一个递归的过程)、

    我们可以发现B2->G2->B1->G5是路,然后可以发现(B2,G2)(B1,G5),所以路要长对数就越多,所以其实我们就是在寻找一条增广路。

    (摘自以上blog)

    1. 匈牙利算法寻找最大匹配,就是通过不断寻找原有匹配M的增广路径,因为找到一条M匹配的增广路径,就意味着一个更大的匹配M' , 其恰好比M 多一条边。

     

    2. 对于图来说,最大匹配不是唯一的,但是最大匹配的大小是唯一的。

     代码:

    vis[]代表本次匹配时的girl是否有新的boyfriend,每次一个新的匹配前都要清零,不用担心vis[a[i].to]=1,却没有return会影响后面的dfs,若vis[a[i].to]=1却没return,说明这个点不能回退

    c[]表示此girl所归属的boy

    推荐题:洛谷P1129

    P2825 [HEOI2016/TJOI2016]游戏

  • 相关阅读:
    正则表达式(四)--文本换行分割
    java加密类型和算法名称
    记事本记录日志
    DNS
    jstl--c:choose标签
    csv文本编辑引号问题
    JDBC----ReflectionUtils
    Jsp
    计算机网络 编程 总结:
    N颗骰子的问题
  • 原文地址:https://www.cnblogs.com/Jessica-Cao/p/13521932.html
Copyright © 2020-2023  润新知