码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2019-08-30 20:45:22      阅读:56      评论:0      收藏:0      [点我收藏+]

标签:输出   mes   one   std   图片   can   ios   mat   event   

嗯...

 

题目链接: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 过山车(二分图 && 匈牙利 && 最小点覆盖)

标签:输出   mes   one   std   图片   can   ios   mat   event   

原文地址:https://www.cnblogs.com/New-ljx/p/11436814.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!