HDU 2063 过山车(二分图 && 匈牙利 && 最小点覆盖)

Posted new-ljx

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HDU 2063 过山车(二分图 && 匈牙利 && 最小点覆盖)相关的知识,希望对你有一定的参考价值。

嗯...

 

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2063

 

这是一道很经典的匈牙利问题:

把男同学看成左边点,女同学看成右边点,如果两个同学愿意同坐过山车,则连边,最后输出最大匹配数即可...

AC代码:

技术图片
 1 #include<cstdio>
 2 #include<iostream>
 3 #include<cstring>
 4 
 5 using namespace std;
 6 
 7 int k, n, m;
 8 int match[505], vis[505], g[505][505];
 9 
10 inline int dfs(int u)
11     for(int i = 1; i <= m; i++)
12         if(g[u][i] && !vis[i])
13             vis[i] = 1;
14             if(!match[i] || dfs(match[i]))
15                 match[i] = u;
16                 return 1;
17             
18         
19     
20     return 0;
21 
22 
23 inline int hungary()
24     memset(match, 0, sizeof(match));
25     int ans = 0;
26     for(int i = 1; i <= n; i++)
27         memset(vis, 0, sizeof(vis));
28         if(dfs(i)) ans++;
29     
30     return ans;
31 
32 
33 int main()
34     while(~scanf("%d%d%d", &k, &n, &m) && k != 0)
35         memset(g, 0, sizeof(g)); 
36         for(int i = 1; i <= k; i++)
37             int a, b;
38             scanf("%d%d", &a, &b);
39             g[a][b] = 1;
40         
41         printf("%d\n", hungary());
42     
43     return 0;
44 
AC代码

 

以上是关于HDU 2063 过山车(二分图 && 匈牙利 && 最小点覆盖)的主要内容,如果未能解决你的问题,请参考以下文章

hdu2063 过山车 二分图最大匹配

hdu-2063 过山车(二分图)

HDU 2063 过山车 二分图最大匹配(模板题)

hdu 2063 过山车 二分图的最大匹配 匈牙利算法

过山车 HDU 2063 (二分图匹配裸题)

luogu3386 模板二分图匹配 匈牙利算法 hdu2063 过山车 dinic