zoukankan      html  css  js  c++  java
  • 【二分图匹配】洛谷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;
    }
  • 相关阅读:
    启动WCF多个服务方法
    获取本机内存使用信息、DataTable占用内存空间
    分享到微博代码
    EXCEL拼接SQL
    动态调用webservice及WCF服务
    整洁架构
    端口与适配器架构
    清晰架构
    EBI架构 VS. MVC
    查看Oracle加锁情况及解锁方法
  • 原文地址:https://www.cnblogs.com/Koiny/p/9883119.html
Copyright © 2011-2022 走看看