hdu1507最大匹配
题意:给出n*m的矩阵方块,某些方块是ponds,这些方块不能出售,然后能出售的是1*2的方块
要求求出有多少块1*2的方块能够出售,并输出这些方块的坐标(specia judge)
关键是怎么建出二分图,然后找最大匹配
可以把i+j==奇数的点提取出来,成为X集合,那么与(i,j)相邻的点就是Y集合了,然后就是二分图最大匹配
- //关键在于建图
- #include <stdio.h>
- #include <string.h>
- #include <vector>
- using namespace std;
- const int N = +;
- int Map[][];
- int n,m,k;
- vector<int> G[N];
- int dx[] = {,,-,};
- int dy[] = {-,,,};
- bool vis[N];
- int cy[N];
- int cx[N];
- bool dfs(int u)
- {
- for(int i=; i<G[u].size(); ++i)
- {
- int v = G[u][i];
- if(!vis[v])
- {
- vis[v] = true;
- if(cy[v] == - || dfs(cy[v]))
- {
- cy[v] = u;
- cx[u] = v;
- return true;
- }
- }
- }
- return false;
- }
- int MaxMatch()
- {
- memset(cy, -, sizeof(cy));
- memset(cx, -, sizeof(cx));
- int t = m * n;
- int cnt = ;
- for(int i=; i<t; ++i)
- {
- if(cx[i] == -)
- {
- memset(vis,,sizeof(vis));
- cnt += dfs(i);
- }
- }
- return cnt;
- }
- int main()
- {
- int i,j,x,y;
- while(true)
- {
- scanf("%d%d",&n,&m);
- if(n== && m==)
- break;
- scanf("%d",&k);
- for(i=; i<N; ++i)
- G[i].clear();
- memset(Map, , sizeof(Map));
- for(i=; i<k; ++i)
- {
- scanf("%d%d",&x,&y);
- x-=; y-=;
- Map[x][y] = ;
- }
- for(i=; i<n; ++i)
- for(j=; j<m; ++j)
- if(Map[i][j] == && (i+j)&==)
- {
- x = i * n + j;
- for(k=; k<; ++k)
- {
- int a = dx[k] + i;
- int b = dy[k] + j;
- if(a>= && b>= && a<n && b<m && Map[a][b] == )
- {
- y = a * n + b;
- G[x].push_back(y);
- }
- }
- }
- int ans = MaxMatch();
- printf("%d\n",ans);
- int t = n * m;
- for(i=; i<t; ++i)
- if(cx[i] != -)
- printf("(%d,%d)--(%d,%d)\n",i/n+,i%n+,cx[i]/n+,cx[i]%n+);
- }
- return ;
- }
hdu1507最大匹配的更多相关文章
- hdu1507 最大匹配
题目大意: 在 n*m在矩阵中,有一些点被标记为黑色,问可以多少对相邻的没有重复的白色块. 思路: 看上去与二分匹配毫无关系.但是没有其他好的解法,转化为二分匹配是正解.二分匹配的条件是{X,Y|E} ...
- 「日常训练」Uncle Tom's Inherited Land*(HDU-1507)
题意与分析 题意是这样的:给你一个\(N\times M\)的图,其中有一些点不能放置\(1\times 2\)大小的矩形,矩形可以横着放可以竖着放,问剩下的格子中,最多能够放多少个矩形. 注意到是\ ...
- 4185 Oil Skimming 最大匹配 奇偶建图
题目大意: 统计相邻(上下左右)的‘#’的对数. 解法: 与题目hdu1507 Uncle Tom's Inherited Land*类似,需要用奇偶建图.就是行+列为奇数的作为X集合,偶尔作为Y集合 ...
- Python学习实践------正向最大匹配中文分词
正向最大匹配分词: 1.加载词典文件到集合中,取词典文件中最大长度词的length 2.每次先在句子中按最大长度分割,然后判断分割的词是否存在字典中,存在则记录此词,调整起始点. 3.不存在则按最大长 ...
- UOJ79 一般图最大匹配
题目描述 从前一个和谐的班级,所有人都是搞OI的.有 nn 个是男生,有 00 个是女生.男生编号分别为 1,-,n1,-,n. 现在老师想把他们分成若干个两人小组写动态仙人掌,一个人负责搬砖另一个人 ...
- hdu 1281 二分图最大匹配
对N个可以放棋子的点(X1,Y1),(x2,Y2)......(Xn,Yn);我们把它竖着排看看~(当然X1可以对多个点~) X1 Y1 X2 Y2 X3 Y3 ..... Xn Yn ...
- POJ 2226二分图最大匹配
匈牙利算法是由匈牙利数学家Edmonds于1965年提出,因而得名.匈牙利算法是基于Hall定理中充分性证明的思想,它是二部图匹配最常见的算法,该算法的核心就是寻找增广路径,它是一种用增广路径求二分图 ...
- hdu-1179-二分图最大匹配
Ollivanders: Makers of Fine Wands since 382 BC. Time Limit: 2000/1000 MS (Java/Others) Memory Lim ...
- codevs1022 覆盖[Hungary 二分图最大匹配]
codevs1022 覆盖 有一个N×M的单位方格中,其中有些方格是水塘,其他方格是陆地.如果要用1×2的矩阵区覆盖(覆盖过程不容许有任何部分重叠)这个陆地,那么最多可以覆盖多少陆地面积. 输入描述 ...
随机推荐
- USM锐化之openCV实现,附赠调整对比度函数
源地址:http://www.cnblogs.com/easymind223/archive/2012/07/03/2575277.html 常用Photoshop的玩家都知道Unsharp Mask ...
- Apache commons-net用法的一个示例
jar: commons-io-2.4.jarcommons-net-3.3.jar Code: import java.io.File; import java.io.FileInputStream ...
- 辛星PHP教程之yii和ci教程已经写完,望与朋友们交流
记得有个朋友给我说,你写的PHP框架是不是过于少了.我感觉仅仅有一个thinkphp确实不好,于是就又写了下yii和ci的教程,事实上我之前是研究过这两个框架的,因此写起来也还算得心应手吧.估计接下 ...
- CentOS下安装MySQL,Windows下使用Navicat for MySql连接
安装 查看有没有安装过: yum list installed mysql* rpm -qa | grep mysql* 查看有没有安装包: yu ...
- Samba & Nginx - Resource temporarily unavailable
先说说本人的开发环境:Win7 + Editplus + VMware(Centos+Samba+Nginx).用Samba在Centos上把web文件夹(如www)共享,然后在Win7上訪问这个文件 ...
- Spark SQL Catalyst源代码分析Optimizer
/** Spark SQL源代码分析系列*/ 前几篇文章介绍了Spark SQL的Catalyst的核心运行流程.SqlParser,和Analyzer 以及核心类库TreeNode,本文将具体解说S ...
- Android开发 - ActivityLifecycleCallbacks用法初探
ActivityLifecycleCallbacks是什么? Application通过此接口提供了一套回调方法,用于让开发人员对Activity的生命周期事件进行集中处理. 为什么用Activity ...
- PV(访问量)、UV(独立访客)、IP(独立IP) (转)
网站统计中的PV(访问量):UV(独立访客):IP(独立IP)的定义与区别今天使用了雅虎统计,看到里面就有这个,就说说,其实里面的uv大家可能觉得很新奇,但是和站长统计里的独立访客是一样的嘛.---- ...
- Linux 系统文件夹结构
登录后,在当前的命令窗口中输入命令: <span style="font-size:14px;">ls /</span> 你的终端上会出现例如以下的代码: ...
- 关于在ios7之后改变状态栏颜色
看到网上都说 在ios7之后要这样设置 首先,须要在Info.plist配置文件里,添加键:UIViewControllerBasedStatusBarAppearance,并设置为YES: 然后,在 ...