二分图匈牙利算法模板

Posted martinue

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二分图匈牙利算法模板相关的知识,希望对你有一定的参考价值。

最大匹配数:最大匹配的匹配边的数目

最小点覆盖数:选取最少的点,使任意一条边至少有一个端点被选择

最大独立数:选取最多的点,使任意所选两点均不相连

最小路径覆盖数:对于一个 DAG(有向无环图),选取最少条路径,使得每个顶点属于且仅属于一条路径。路径长可以为0(即单个点)。

定理1:最大匹配数 = 最小点覆盖数(这是 Konig 定理)

定理2:最大匹配数 = 最大独立数

定理3:最小路径覆盖数 = 顶点数 - 最大匹配数


const int N=555;///两边的最大数量
bool tu[N][N];
int from[N];///记录右边的点如果配对好了它来自哪里
bool use[N];///记录右边的点是否已经完成了配对
int n,m;///m,n分别表示两边的各自数量,n是左边,m是右边
bool dfs(int x)
{
    for(int i=1;i<=m;i++)///m是右边,所以这里上界是m
    if(!use[i]&&tu[x][i])
    {
        use[i]=1;
        if(from[i]==-1||dfs(from[i]))
        {
            from[i]=x;
            return 1;
        }
    }
    return 0;
}
int hungary()
{
    int tot=0;
    memset(from,-1,sizeof(from));
    for(int i=1;i<=n;i++)///n是左边,所以这里上界是n
    {
        memset(use,0,sizeof(use));
        if(dfs(i))
            tot++;
    }
    return tot;
}

也可以改写成vector版本的,方法比较灵活。



以上是关于二分图匈牙利算法模板的主要内容,如果未能解决你的问题,请参考以下文章

匈牙利 算法&模板

二分图匈牙利算法模板

二分图匹配——匈牙利算法

二分图最大匹配(匈牙利算法Dfs模板)

861. 二分图的最大匹配(匈牙利算法模板)

匈牙利算法及其模板 - [二分图最大匹配]