• hdu 2063 过山车 (最大匹配 匈牙利算法模板)


    匈牙利算法是由匈牙利数学家Edmonds于1965年提出,因而得名。匈牙利算法是基于Hall定理中充分性证明的思想,它是部图匹配最常见的算法,该算法的核心就是寻找增广路径,它是一种用增广路径求二分图最大匹配的算法。

    题目链接:

      http://acm.hdu.edu.cn/showproblem.php?pid=2063

    题目大意:

      中文题目,点进去马上知道。

    解题思路:

      这道题目就是求最大匹配数目,直接套用匈牙利算法模板,这个算法大概原则就是:有机会上,没有机会创造机会也要上。

    代码:

     1 #include <cstdio>
     2 #include <cstring>
     3 #include <iostream>
     4 #include <algorithm>
     5 using namespace std;
     6 
     7 #define maxn 505
     8 int map[maxn][maxn], used[maxn], girl[maxn], n, m;
     9 //map储存匹配关系,used用来标记是否增广过,girl[i]表示girl[i]这个女生已经和i这个男生匹配
    10 bool find (int x);
    11 int main ()
    12 {
    13     int k;
    14     while (scanf ("%d", &k), k)
    15     {
    16         scanf ("%d %d", &m, &n);
    17         memset (map, 0, sizeof(map));
    18         memset (girl, 0, sizeof(girl));
    19 
    20         while (k --)
    21         {
    22             int u, v;
    23             scanf ("%d %d", &u, &v);
    24             map[u][v] = 1;
    25         }
    26 
    27         int sum = 0;
    28         for (int i=1; i<=m; i++)
    29         {//每个女生匹配,都需要清空标记增广数组
    30             memset (used, 0, sizeof(used));
    31             if (find (i))
    32                 sum ++;
    33         }
    34         printf ("%d
    ", sum);
    35     }
    36     return 0;
    37 }
    38 
    39 bool find (int x)
    40 {//dfs增广,寻找x的匹配
    41     for (int i=1; i<=n; i++)
    42     {
    43         if (!used[i] && map[x][i])
    44         {//未被增广并且x与i可以匹配
    45             used[i] = 1;
    46             if (!girl[i] || find(girl[i]))
    47             {//i没有和任一个女生匹配或者发现增光路,则匹配成功
    48                 girl[i] = x;
    49                 return true;
    50             }
    51         }
    52     }
    53     return false;
    54 }
    本文为博主原创文章,未经博主允许不得转载。
  • 相关阅读:
    linux之vim编辑器
    linux之bash shell
    liunx系统部署
    安卓ImageButton圆角按钮设置
    C语言中.h和.c文件解析(转载)
    搭建svn服务器&服务器客户端使用笔记
    git服务器创建,冲突解决,远程仓库获取指定文件
    win32 htmlayout dom操作demo
    win32 htmlayout点击按钮创建新窗口,以及按钮图片样式
    win32最简单的htmlayout图形界面demo
  • 原文地址:https://www.cnblogs.com/alihenaixiao/p/4475578.html
Copyright © 2020-2023  润新知