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

二分匹配水题,求最大匹配数(即求边数最多的匹配),匈牙利算法实现。。

View Code

 1 #include<iostream>
 2 const int MAXN=507;
 3 using namespace std;
 4 int k,m,n;
 5 int map[MAXN][MAXN];
 6 int cx[MAXN],cy[MAXN];
 7 int mark[MAXN];
 8
 9 int dfs(int u){
10     for(int v=0;v<n;v++){
11         if(map[u][v]&&!mark[v]){
12             mark[v]=1;
13             if(cy[v]==-1||dfs(cy[v])){
14                 cx[u]=v;
15                 cy[v]=u;
16                 return 1;
17             }
18         }
19     }
20     return 0;
21 }
22
23 int MaxMatch(){
24     int res=0;
25     memset(cx,-1,sizeof(cx));
26     memset(cy,-1,sizeof(cy));
27     for(int i=0;i<=m;i++){
28         if(cx[i]==-1){
29             memset(mark,0,sizeof(mark));
30             res+=dfs(i);
31         }
32     }
33     return res;
34 }
35
36
37 int main(){
38     while(~scanf("%d",&k)&&k){
39         scanf("%d%d",&m,&n);
40         int x,y;
41         memset(map,0,sizeof(map));
42         for(int i=0;i<k;i++){
43             scanf("%d%d",&x,&y);
44             map[x-1][y-1]=1;//这里只需单向就行了,因为dfs是就是从X集合的未盖点出发的
45         }
46         int ans=MaxMatch();
47         printf("%d\n",ans);
48     }
49     return 0;
50 }
51
52
53
54     

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

View Code

 1 #include<iostream>
 2 const int MAXN=307;
 3 using namespace std;
 4 int cx[MAXN],cy[MAXN];
 5 int map[MAXN][MAXN];
 6 int mark[MAXN];
 7 int n,m;
 8
 9 int dfs(int u){
10     for(int v=1;v<=m;v++){
11         if(map[u][v]&&!mark[v]){
12             mark[v]=1;
13             if(cy[v]==-1||dfs(cy[v])){
14                 cy[v]=u;
15                 cx[u]=v;
16                 return 1;
17             }
18         }
19     }
20     return 0;
21 }
22
23 int MaxMatch(){
24     int res=0;
25     memset(cx,-1,sizeof(cx));
26     memset(cy,-1,sizeof(cy));
27     for(int i=1;i<=n;i++){
28         if(cx[i]==-1){
29             memset(mark,0,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%d",&n,&m);
41         memset(map,0,sizeof(map));
42         for(int i=1;i<=n;i++){
43             int t;
44             scanf("%d",&t);
45             while(t--){
46                 int x;
47                 scanf("%d",&x);
48                 map[i][x]=1;
49             }
50         }
51         int ans=MaxMatch();
52         if(ans==n){
53             printf("YES\n");
54         }else
55             printf("NO\n");
56     }
57     return 0;
58 }
59
60
61             

转载于:https://www.cnblogs.com/wally/archive/2013/03/30/2990397.html

hdu 2063+hdu 1083(最大匹配数)相关推荐

  1. HDU 1068 Girls and Boys(最大独立集合 = 顶点数 - 最大匹配数)

    HDU 1068 :题目链接 题意:一些男孩和女孩,给出一些人物关系,然后问能找到最多有多少个人都互不认识. 转换一下:就是大家都不认识的人,即最大独立集合 #include <iostream ...

  2. HDU 6178 Monkeys (匹配数+贪心)*

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6178 #include<bits/stdc++.h> using namespace st ...

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

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

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

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

  5. Acwing 1083. Windy数

    Acwing 1083. Windy数 题意: Windy 定义了一种 Windy 数:不含前导零且相邻两个数字之差至少为 2 的正整数被称为 Windy 数. Windy 想知道,在 A 和 B 之 ...

  6. UVALive 2523 Machine Schedule(二分图求最大匹配数)

    题意:有两台机器,上面有多个工作区域,有多个任务,分别可以在两台机器的某一个区域上完成,两台机器一开始都在0区域上工作,每次更改区域,都会重新启动一次,让我们求出最小的重启次数. 思路:将两个区域连线 ...

  7. 二分图大讲堂——彻底搞定最大匹配数(最小覆盖数)、最大独立数、最小路径覆盖、带权最优匹配

    二分图匹配 二分图大讲堂--彻底搞定最大匹配数(最小覆盖数).最大独立数.最小路径覆盖.带权最优匹配(转) 文本内容框架: §1图论点.边集和二分图的相关概念和性质 §2二分图最大匹配求解 匈牙利算法 ...

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

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

  9. HDU - 2063 过山车(二分图最大匹配)

    题目链接:点击查看 题目大意:中文题目,不多赘述 题目分析:二分图最大匹配问题,匈牙利经典算法模板题,感觉这个博客写的很好,插个眼: https://article.itxueyuan.com/Aea ...

最新文章

  1. 以下构成python循环结构的方法中_超星尔雅初级英语口语(持续更新中)选修课答案...
  2. 通过Windows Azure Connect ,实现本地机器与Windows Azure 虚拟机的相互连接(转+译)...
  3. 自动挂载ios_开机自动挂载iso
  4. C# MVC使用阿里云对象存储加快图片加载速度(一)
  5. 计算机二级access知识点6,2019年计算机二级ACCESS考试知识点:关系数据模型
  6. FCPX插件:Color Titles动画彩色文本标题
  7. 计算机视觉技术测试物体距离,应用计算机视觉技术检测物体的形变
  8. Indeterminate ProgressBar
  9. 如何运行PowerShell的脚本文件
  10. iOS学习资源(五)
  11. 时间状语:(现在完成时)/ 固定语句(现在完成时)/29主动表被动/23过去完成时:又 名 过去的过去;/过去将来时/(过去完成时)/25 过去完成时,固定搭配/26 时间状语 (将来完成时)
  12. 共模干扰与差模干扰(及其消除)
  13. 计算机科学论文生成器,软件自动生成假论文:满篇废话
  14. 社交 APP 唔哩星球完成数百万元天使轮融资,投资方为启明创投
  15. Ubuntu突然无法解析域名解决
  16. dhcp计算机毕业论文,计算机网络毕业设计(论文)dhcp在校园网中的应用.pdf
  17. Unity实现人物移动和镜头跟随
  18. Java基础知识Day08---Scaner类
  19. 对项目经理而言,PMP是否对职业生涯的发展有帮助?
  20. Redis底层数据结构介绍

热门文章

  1. C#正则实现匹配一块代码段
  2. [Swift]LeetCode160. 相交链表 | Intersection of Two Linked Lists
  3. SpringBoot系列: Web应用鉴权思路
  4. time datetime 模块
  5. TCGA收官之作—27篇重磅文献绘制“泛癌图谱”
  6. Mybatis【一对多、多对一、多对多】知识要点
  7. 注册服务(addService)
  8. 安卓高手之路 图形系统(2)----------------基于Binder的架构思路)
  9. Ubuntu adb 报错:no permissions (user in plugdev group; are your udev rules wrong?);
  10. synchronized和ReentrantLock区别