• 【二分图匹配】洛谷P3386


    题目背景

    二分图

    题目描述

    给定一个二分图,结点个数分别为n,m,边数为e,求二分图最大匹配数

    输入输出格式

    输入格式:

    第一行,n,m,e

    第二至e+1行,每行两个正整数u,v,表示u,v有一条连边

    输出格式:

    共一行,二分图最大匹配

    输入输出样例

    输入样例#1:
    1 1 1
    1 1
    输出样例#1:
    1 

    说明

     1≤n,m1000, 1un, 1vm

    因为数据有坑,可能会遇到v>m 的情况。请把 v>m 的数据自觉过滤掉。

    算法:二分图匹配

    /********************************************/

    匈牙利算法emmmmm

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<cstring>
    #define ll long long
    using namespace std;
    const ll maxn=1010;
    ll n,m,e,ans=0,match[maxn];
    bool vis[maxn],flag[maxn][maxn];
    bool dfs(ll x)
    {
        for(ll i=1;i<=m;i++)
        {
            if(!vis[i]&&flag[x][i])
            {
                vis[i]=true;
                if(!match[i]||dfs(match[i]))
                {
                    match[i]=x;
                    return true;
                }
            }
        }
        return false;
    }
    int main()
    {
        scanf("%lld%lld%lld",&n,&m,&e);
        memset(flag,0,sizeof(flag));
        for(ll i=1;i<=e;i++)
        {
            ll u,v;
            scanf("%lld%lld",&u,&v);
            if(v<=m) flag[u][v]=true;
        }
        for(ll i=1;i<=n;i++)
        {
            memset(vis,0,sizeof(vis));
            ans+=dfs(i);
        }
        printf("%lld",ans);
        return 0;
    }
  • 相关阅读:
    js中||与&&的用法
    JVM内存模型及配置参数
    Jmeter进行webSocket接口测试
    解决oracle 物化视图刷新失败
    JAVA处理链表经典问题
    openLdap安装教程
    LDAP基本概念
    深度学习正则化---dropout补充
    深度学习正则化---dropout
    深度学习正则化---集成
  • 原文地址:https://www.cnblogs.com/Koiny/p/9883119.html
Copyright © 2020-2023  润新知