zoukankan      html  css  js  c++  java
  • 匈牙利算法

    给定一个二分图,结点个数分别为n,m,边数为e,求二分图最大匹配数

    摘自:

    https://www.luogu.org/blog/fusu2333/post-2018-wu-yi-qing-bei-pei-xun-er-fen-tu-xiong-ya-li-suan-fa-post

    二分图:一群汉子和一群妹子匹配。没有基友也没百合,不能开后宫,这就是二分图。最大匹配就是求能组成的CP最多多少对
    建立有向图G,分为二分图的左侧和右侧。
    优先选择左侧序号更小的连接可能的边。
    对于两个点的目标点“冲突”的时候,采取“协商”的办法。
    即序号小的连接可能连接的另一条边。
    若“协商”失败,则放弃序号较大的点的边。


    不难发现,匈牙利算法就是一个绿与被绿协商与匹配的过程

    上代码:

    bool dfs(int x){
    For(y,1,m){
    if(lk[x][y]&&!vis[y]){
    vis[y]=1;//对于每个男生来说,每dfs一次vis都会清空一次
    if(!mat[y]){
    mat[y]=x;
    return true;
    }else{
    if(dfs(mat[y]){
    mat[y]=x;
    return true;
    }}
    return false;
    }
    
    For(i,1,n)
    {me(vis,,0);
    if(dfs(i))ans++;
    }
  • 相关阅读:
    滚动条去掉
    js 类继承extends
    html标签分类
    Freemarker模板引擎
    关于SpringMVC控制器的一点补充
    Maven的使用
    多层嵌套的json数据
    前后端数据交互之数据接口
    ES6浅谈之Promise
    ES6(阮一峰)学习总结
  • 原文地址:https://www.cnblogs.com/planche/p/9411128.html
Copyright © 2011-2022 走看看