hdu 1507(最大匹配)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1507
思路:这题关键是建图,我们可以把坐标映射建双向图,最后求得的最大匹配数/2就ok了。
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 #include<vector> 6 using namespace std; 7 #define MAXN 10010 8 vector<int>map[MAXN]; 9 int n,m,k; 10 bool mark[MAXN]; 11 bool visited[111][111]; 12 int ly[MAXN]; 13 14 int dfs(int u) { 15 for(int i=0; i<map[u].size(); i++) { 16 int v=map[u][i]; 17 if(!mark[v]) { 18 mark[v]=true; 19 if(ly[v]==-1||dfs(ly[v])) { 20 ly[v]=u; 21 return 1; 22 } 23 } 24 } 25 return 0; 26 } 27 28 29 int MaxMatch() { 30 int res=0; 31 memset(ly,-1,sizeof(ly)); 32 for(int i=1; i<=n*m; i++) { 33 memset(mark,false,sizeof(mark)); 34 res+=dfs(i); 35 } 36 return res; 37 } 38 39 40 int main() { 41 // freopen("1.txt","r",stdin); 42 int u,v; 43 while(scanf("%d%d",&n,&m),(n+m)) { 44 for(int i=1; i<=n*m; i++)map[i].clear(); 45 scanf("%d",&k); 46 memset(visited,false,sizeof(visited)); 47 for(int i=1; i<=k; i++) { 48 scanf("%d%d",&u,&v); 49 visited[u][v]=true; 50 } 51 for(int i=1; i<=n; i++) { 52 for(int j=1; j<=m; j++) { 53 if(visited[i][j])continue; 54 if(i+1<=n&&!visited[i+1][j]) { 55 map[(i-1)*m+j].push_back(i*m+j); 56 map[i*m+j].push_back((i-1)*m+j); 57 } 58 if(j+1<=m&&!visited[i][j+1]) { 59 map[(i-1)*m+j].push_back((i-1)*m+j+1); 60 map[(i-1)*m+j+1].push_back((i-1)*m+j); 61 } 62 } 63 } 64 int ans=MaxMatch(); 65 printf("%d\n",ans/2); 66 for(int i=1; i<=n*m; i++) { 67 if(ly[i]!=-1&&ly[ly[i]]!=-1) { 68 int y1=i%m; 69 if(y1==0)y1=m; 70 int x1=(i-y1)/m+1; 71 int y2=ly[i]%m; 72 if(y2==0)y2=m; 73 int x2=(ly[i]-y2)/m+1; 74 ly[i]=ly[ly[i]]=-1; 75 printf("(%d,%d)--(%d,%d)\n",x1,y1,x2,y2); 76 } 77 } 78 puts(""); 79 } 80 return 0; 81 }
View Code
转载于:https://www.cnblogs.com/wally/archive/2013/06/05/3119701.html
hdu 1507(最大匹配)相关推荐
- HDU 1507 Uncle Tom's Inherited Land(最大匹配+分奇偶部分)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1507 题目大意:给你一张n*m大小的图,可以将白色正方形凑成1*2的长方形,问你最多可以凑出几块,并输 ...
- hdu 2063+hdu 1083(最大匹配数)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2063 二分匹配水题,求最大匹配数(即求边数最多的匹配),匈牙利算法实现.. View Code 1 # ...
- hdu 1507 Uncle Tom's Inherited Land*
这两天刚学二分图,对二分图的应用还不熟练;感觉自己还是太弱了,这题是参考别人代码的; 这题是把(i+j)的值得奇偶性来分图的,请原谅我没有想到,还是太水了..根本没有思路.. 先用一个数组暂时存起鱼塘 ...
- hdu 1845(最大匹配)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1845 思路:匈牙利算法应用,900ms+险过.(好像直接n/2就行) 1 #include<io ...
- 解题报告 (九) 二分图最大匹配
文章目录 二分图最大匹配 解题报告 一.最大匹配模板题 HDU 1083 Courses HDU 2063 过山车 HDU 1528 Card Game Cheater HDU 1179 Olliva ...
- [kuangbin]各种各样的题单
[kuangbin]各种各样的题单 专题1 简单搜索 POJ 1321 POJ 2251 POJ 3278 POJ 3279 POJ 1426 POJ 3126 POJ 3087 POJ 3414 F ...
- 杭电OJ分类题目(4)-Graph
原题出处:HDOJ Problem Index by Type,http://acm.hdu.edu.cn/typeclass.php 杭电OJ分类题目(4) HDU Graph Theory - U ...
- hdu 3729(二分图最大匹配+最大字典序)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3729 解题思路:节点i对Xi~Yi之间的每一个点都连一条边,这样问题就转化成二分图的最大匹配了.字典序 ...
- hdu 2444(二分图的判断以及求最大匹配)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2444思路:首先要判断能否构成二分图,用bfs对当前点u染色,对u的邻接点v的颜色进行判断,如果为染色, ...
最新文章
- 几行代码搞定ML模型,低代码机器学习Python库正式开源
- LeetCode 7. 整数反转 Reverse Integer 官网答案的条件判定的一点思考
- 在Windows下,用Hexo搭建博客
- 百万数据报表导出:原理分析与总结
- CRM、DMP、CDP的区别
- html json解析插件,jQuery插件jsonview展示json数据
- PostgreSQL+安装及常见问题
- C/C++遍历Windows文件夹下的所有文件
- 常用视频格式与视频编解码标准介绍
- 【正版软件】Virtual Display Manager 虚拟显示器布局配置管理软件
- 项目管理面试常见问题及答案
- MIT 麻省理工学院公开课程视频下载方法
- html扫码支付,WEB端第三方支付接入 - 支付宝 - 扫码支付
- nginx 配置后缀
- 五分钟理解MVC三层架构
- 赵栋/东文才 《面向对象程序设计(java)》第十一周学习总结
- json对象与json字符串互转,ajax各常见函数
- DevOps之五Jenkins
- 和陆琪一起侃一侃在这个看脸的世界,容貌改变命运
- 元宇宙区块链游戏开发 元宇宙手机游戏开发