zoukankan      html  css  js  c++  java
  • [洛谷P3386] [模板] 二分图匹配 (匈牙利算法)

    题目传送门

    毒瘤出题人zzk出了个二分图匹配的题(18.10.04模拟赛T2),逼我来学二分图匹配。

    网络流什么的llx讲完之后有点懵,还是匈牙利比较好理解(绿与被绿)。

    对于左边的点一个一个匹配,记录右边哪个点跟左边的i匹配:cp[i]

    如果还没有配对,就直接配上。

    如果已经有匹配了,每次dfs找增广路(看看能不能换一下),如果成功,那么匹配数增加一。

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<algorithm>
     4 using namespace std;
     5 
     6 int n,m,ec,ans;
     7 int e[1005][1005];
     8 int cp[1005];
     9 int used[1005];
    10 
    11 int dfs(int p)
    12 {
    13     for(int i=1;i<=m;i++)
    14     {
    15         if(!used[i]&&e[p][i])
    16         {
    17             used[i]=1;
    18             if(!cp[i]||dfs(cp[i]))
    19             {
    20                 cp[i]=p;
    21                 return 1;
    22             }
    23         }
    24     }
    25     return 0;
    26 }
    27 
    28 void hungary()
    29 {
    30     ans=0;
    31     for(int i=1;i<=n;i++)
    32     {
    33         memset(used,0,sizeof(used));
    34         if(dfs(i))ans++;
    35     }
    36 }
    37 
    38 int main()
    39 {
    40     scanf("%d%d%d",&n,&m,&ec);
    41     for(int i=1;i<=ec;i++)
    42     {
    43         int a,b;
    44         scanf("%d%d",&a,&b);
    45         e[a][b]=1;
    46     }
    47     hungary();
    48     printf("%d",ans);
    49     return 0;
    50 }
  • 相关阅读:
    生成器和推导式
    闭包
    python
    python初识函数二
    python函数初识
    python文件操作二
    文件操作
    python集合,深浅copy
    Python安装、配置图文详解
    jsDoc 使用及配置!
  • 原文地址:https://www.cnblogs.com/eternhope/p/9743239.html
Copyright © 2011-2022 走看看