• 二分图匹配


    一直在做题。。然而算法博客鸽了一篇又一篇。。。
    这一篇可能会是开始补博客的开端???

    二分图

    众所周知,(???)二分图是可以分成两个部分的图,只有在两个部分之间有连边,在同一个部分内没有边
    例如下面这张图就是二分图
    (并没有,回家补)
    而这个并不是二分图
    (也没有,回家补)

    那么锌的问题来了
    二分图匹配又是求什么的呢?

    匹配

    关于匹配,最应该想到的是男男和女女分别配对男女配对是吧
    例如下面这道题

    你是一个班级的班长,性别男,你知道所有班级内所有男生的所有暗恋对象,你的目标是安排座位使得最多的男生得到满足
    (好像哪里不太对??)

    (下面需要图片说明先鸽了)

    这就是我们要的匈牙利算法!
    模版

    int mcx[MAXN],mcy[MAXN];
    bool vis[MAXN];
    int dfs(int x) {
        for (int i = head[x]; i ; i = edge[i].nxt){     //这里是链式前向星的图的遍历方式
            int v = edge[i].v;
            if (! vis[v]) {
                vis[v] = true;
                if (! mcy[v] || dfs(mcy[v])) {         //借用c++特性,如果第一个条件满足则不查第二个条件
                    mcx[x] = v;
                    mcy[v] = x;
                    return 1;
                }
            }
        }
        return 0;
    }
    int match(){
    	int ans=0;
    	for (int i=1; i<=n*2; i++) {
            memset(vis,0,sizeof(vis));
            ans+=dfs(i);
        }
        return ans;
    }
    

    当然二分图匹配也可以用网络流来做
    请自行思考如何建边

    练习:
    luoguP3386模版
    luoguP2319超级英雄
    luoguP2071座位安排

  • 相关阅读:
    类别的三个作用
    require()
    commonJS
    ng-app&data-ng-app
    《css网站布局实录》(李超)——读书札记
    高性能JS(读书札记)
    两个同级div重叠的情况
    前端性能优化
    正则表达式
    ajax
  • 原文地址:https://www.cnblogs.com/shulker/p/9707861.html
Copyright © 2020-2023  润新知