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

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

思路:求二分图的最小覆盖,最小覆盖=最大匹配;

建图略麻烦。。。

View Code

 1 #include<iostream>
 2 const int MAXN=30;
 3 using namespace std;
 4 int n;
 5 bool map[MAXN][MAXN];
 6 int lx[MAXN],ly[MAXN];
 7 bool mark[MAXN];
 8
 9 int dfs(int u){
10     for(int i=1;i<=n;i++){
11         if(!mark[i]&&map[u][i]){
12             mark[i]=true;
13             if(ly[i]==-1||dfs(ly[i])){
14                 ly[i]=u;
15                 lx[u]=i;
16                 return true;
17             }
18         }
19     }
20     return false;
21 }
22
23 int MaxMatch(){
24     int res=0;
25     memset(lx,-1,sizeof(lx));
26     memset(ly,-1,sizeof(ly));
27     for(int i=1;i<=n;i++){
28         if(lx[i]==-1){
29             memset(mark,false,sizeof(mark));
30             res+=dfs(i);
31         }
32     }
33     return res;
34 }
35
36 int main(){
37     int _case;
38     scanf("%d",&_case);
39     while(_case--){
40         scanf("%d",&n);
41         char str1[MAXN][4],str2[MAXN][4];
42         memset(map,false,sizeof(map));
43         for(int i=1;i<=n;i++){
44             scanf("%s",str1[i]);
45         }
46         for(int i=1;i<=n;i++){
47             scanf("%s",str2[i]);
48             for(int j=1;j<=n;j++){
49                 if(str2[i][0]==str1[j][0]){
50                     if(str2[i][1]==str1[j][1])continue;
51                     else if(str2[i][1]=='H'){
52                         map[i][j]=true;
53                     }else if(str2[i][1]=='S'&&str1[j][1]!='H'){
54                         map[i][j]=true;
55                     }else if(str2[i][1]=='D'&&str1[j][1]=='C'){
56                         map[i][j]=true;
57                     }
58                 }else if(str2[i][0]>='2'&&str2[i][0]<='9'){
59                     if(str1[j][0]>='2'&&str1[j][0]<='9'&&str2[i][0]>str1[j][0]){
60                         map[i][j]=true;
61                     }
62                 }else if(str2[i][0]=='T'&&str1[j][0]>='2'&&str1[j][0]<='9'){
63                     map[i][j]=true;
64                 }else if(str2[i][0]=='J'&&(str1[j][0]>='2'&&str1[j][0]<='9'||str1[j][0]=='T')){
65                     map[i][j]=true;
66                 }else if(str2[i][0]=='Q'&&str1[j][0]!='K'&&str1[j][0]!='A'){
67                     map[i][j]=true;
68                 }else if(str2[i][0]=='K'&&str1[j][0]!='A'){
69                     map[i][j]=true;
70                 }else if(str2[i][0]=='A'){
71                     map[i][j]=true;
72                 }
73             }
74         }
75         int ans=MaxMatch();
76         printf("%d\n",ans);
77     }
78     return 0;
79 }

hdu 1528+hdu 1962(最小覆盖)相关推荐

  1. HDU 1853 HDU 3488【有向环最小权值覆盖问题 】带权二分图匹配 KM算法

    HDU 1853 & HDU 3488[有向环最小权值覆盖问题 ]最小费用最大流 In the kingdom of Henryy, there are N (2 <= N <= ...

  2. HDU 1853 HDU 3488【有向环最小权值覆盖问题 】最小费用最大流

    HDU 1853 & HDU 3488[有向环最小权值覆盖问题 ]带权二分图匹配 KM算法 In the kingdom of Henryy, there are N (2 <= N & ...

  3. 母函数+例题(hdu 2079+hdu 2082)

    母函数+例题(hdu 2079+hdu 2082) 虽然ACM的确有点力不从心,但是还是贵在坚持,继续啃啃算法..... 昨天一个下午学了学母函数,离散数学+幂级数,只能说nb- 看了半天的原理,结果 ...

  4. HDU - 1528 Card Game Cheater(二分图最大匹配)

    题目链接:点击查看 题目大意:题意有点像求田忌赛马的最优解,大概意思就是现在有两个人,每个人都有n张不同的扑克牌,扑克牌的大小首先以点数来确定,点数相同的情况下以花色来决定,红桃(Heart)> ...

  5. hdu 1251+hdu 1671(字典树)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1251 一开始我是直接用STL做的,唉...没有经验那...orz...然后毫无疑问地超时了... 看别 ...

  6. hdu 2063+hdu 1083(最大匹配数)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2063 二分匹配水题,求最大匹配数(即求边数最多的匹配),匈牙利算法实现.. View Code 1 # ...

  7. hdu 2112 HDU Today 最短路(Dijkstra算法)

    HDU Today                                                                 Time Limit: 15000/5000 MS ...

  8. HDU 2112 HDU Today (dijkstar + map)

    HDU Today Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  9. KMP算法 hdu 1711 hdu 2203

    mark一下,重新温习了 KMP KMP复杂度O(n+m) 这里有一个解释的超级的好的博客,大家可以去看一下:http://blog.csdn.net/v_july_v/article/details ...

最新文章

  1. 鸿蒙os系统的iphonexr,iPhoneXS/XR终极防水测试:iPhoneXR不幸阵亡
  2. numpy是python标准库吗_python – 找出Numpy是否使用了哪个BLAS库
  3. 卸载iso linux系统文件夹,在Ubuntu系统中如何卸载光盘/DVD/ISO
  4. asp.net学习资源汇总
  5. 动态折线图-Android篇
  6. Windows 7 Beta(32位\64位)官方镜像文件下载
  7. java 8中 predicate chain的使用
  8. mysql+create+table+index_mysql------基础及常见SQL技巧
  9. Nginx-Lua重定向系列
  10. PAT Basic 1002
  11. 用Python玩转统计数据:取样、计算相关性、拆分训练模型和测试
  12. 分享一下10个常用jquery片段
  13. win7安装计算机的更新,解决win7系统更新升级教程
  14. matlab中dot是什么,matlab中ddot是什么
  15. 什么是白箱测试、黑箱测试、回归测试?
  16. krait和kryo_高通kryo架构还是arm吗
  17. 帝国Empire采集-帝国如何免费采集
  18. 锂电池原理与使用保养
  19. 无人机作战效能评估系统
  20. 《java并发编程的艺术》阅读笔记总结

热门文章

  1. php error 2,一起搞懂PHP的错误和异常(二)
  2. mysql syncbinlog_Mysql之sync-binlog参数
  3. json mysql 字段 默认值_MySQL中的JSON类型
  4. Apache 内容动态缓冲模块 mod
  5. #Node.js的fs导入遇到的问题和解决方案
  6. T1330 最少步数(#Ⅱ- 8)(广度优先搜索)
  7. [No0000176]Git常用命令速查表(收藏大全)
  8. flex布局知识点总结
  9. Cron 表达式详解
  10. 禁止input输入框输入指定内容