• 二分图笔记


    二分图 <=> 不存在奇环

    二分图判定:黑白染色

    CF构造题

     http://www.renfei.org/blog/bipartite-matching.html

    一、二分图的最大匹配问题

    匈牙利算法

    int n;
    int a[maxn][maxn];  //互相喜欢
    int link[maxn];  //第i个女生的男伴是谁
    bool vis[maxn];  //表示第i个女生有没有在这一次找搭档过程中被邀请
    
    bool dfs(int x) //给第x个男生找搭档
    {
        for(int i = 1; i <= n; ++i)  //遍历每个女生
        {
            if(!a[x][i] || vis[i]) continue;
            vis[i] = 1;
            if(link[i] == 0 || dfs(link[i]))  //直接匹配或者给第i个女生的男伴重新找一个搭档
            {
                link[i] = x;
                return 1;
            }
        }
        return 0;
    }
    int main() {
        cin >> n;
        int cnt = 0;
        for (int i = 1; i <= n; ++i) //遍历每个男生 尝试找搭档
        {
            memset(vis, 0, sizeof(vis));
            if(dfs(i)) ++cnt;    //统计一共找到多少对
        }
    }

    复杂度:

    邻接矩阵:O(n^3)

    邻接表:O(nm)

    最大匹配数:最多匹配的对数(每个顶点最多被一条边覆盖)

    最小点覆盖数:每个点覆盖以它为端点的所有边,选择最少的点来覆盖所有边

     二分图的最大匹配数等于该图的最小点覆盖数

    对于匹配的每一对,都选择一个顶点进行覆盖,此时其实已经覆盖完所有边了,因为若有一条边没有被覆盖,那么它就是一个新的匹配,加入,再被覆盖。

    二、二分图最优匹配----KM算法

     

  • 相关阅读:
    python-打包程序
    python-记log
    Git-分支
    跨线程调用控件之MethodInvoker
    c# Invoke和BeginInvoke 区别
    winform 开发之Control.InvokeRequired
    C#三种定时器的实现
    winform窗口打开后文本框的默认焦点设置
    C#在Winform中改变Textbox高度三种方法
    Json.net/Newtonsoft 3.0 新特性JObject/Linq to Json
  • 原文地址:https://www.cnblogs.com/Maxx-el/p/14073034.html
Copyright © 2020-2023  润新知