二分图的常用定义&性质&定理&二分图判定模板

补充定义和定理:

如果建的是双向边那么最后匹配数要除以二(因为这样一来,在统计配对数时,每组配对计算了两次(即a,b配对时,b也与a配对)

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

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

最大独立集=所有顶点数-最小顶点覆盖

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

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

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

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

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


如何判定二分图?

用BFS判断二分图,将每对点分为0或1,如果所有点对都满足这个规律,那就是二分图。

代码:

bool bfs()
{
    memset(judge,-1,sizeof(judge));
    queue<int> q;
    q.push(1);
    judge[1]=0;
    while(!q.empty())
    {
        int v=q.front();
        q.pop();
        for(int i=1;i<=n;++i)
        {
            if(mp[v][i])
            {
                if(judge[i]==-1)
                {
                    judge[i]=(judge[v]+1)%2;
                    q.push(i);
                }
                else
                {
                    if(judge[i]==judge[v])
                        return false;
                }
            }
        }
    }
    return true;
}

猜你喜欢

转载自blog.csdn.net/qq_41510496/article/details/80877247
今日推荐