二分图匹配模板

Posted kyledeng

tags:

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

#include<bits/stdc++.h>
using namespace std;

int edge[1005][1005];
int match_x[1005];
int match_y[1005];
int book[1005];

int n,m,e;

int dfs(int u)
{
    for(int i=1;i<=m;i++)
    {
        if(book[i]==0&&edge[u][i]==1)//有边且没有访问过 
        {
            book[i]=1;
            if(match_y[i]==0||dfs(match_y[i]))//y没有匹配或者y的男友找到了增广路 
            {
                match_x[u]=i;
                match_y[i]=u;//此模板要分开标记配对,因为男女编号相同
                return true;
            }
        }
    }
    return false;
}

int main()
{
    ios::sync_with_stdio(false); 
    cin>>n>>m>>e;
    for(int i=1;i<=e;i++)
    {
        int a,b;
        cin>>a>>b;
        if(a>=1&&b>=1&&a<=n&&b<=m)//卡掉奇怪的数据 
        {
            edge[a][b]=1;//只需要从男友开始找增广路 
            //edge[b][a]=1; 
        }
    }
    int ans=0;
    for(int i=1;i<=n;i++)
    {
        memset(book,0,sizeof(book));//清空访问过的标记 
        if(dfs(i)) ans++;
    }
    cout<<ans<<endl;
    return 0;
}//当且仅当无向图G的回路个数为偶数时,图G为一个二分图。

 

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

HDU - 1083 Courses (二分图最大匹配模板)

模板二分图匹配

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

P3386 模板二分图匹配

二分图匹配([洛谷]P3386 模板 二分图匹配)

luoguP3386 模板二分图匹配