zoukankan      html  css  js  c++  java
  • 二分图匹配模板

    #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为一个二分图。
  • 相关阅读:
    Baskets of Gold Coins_暴力
    Inversion_树状数组***
    萌新的旅行-
    KI的斐波那契_DFS
    牛吃草_二分法
    See you~_树状数组
    Bellovin_树状数组
    Bubble Sort_树状数组
    [Python] numpy.ndarray.shape
    [Python] numpy.sum
  • 原文地址:https://www.cnblogs.com/KyleDeng/p/9844797.html
Copyright © 2011-2022 走看看