HDU 3360 National Treasures 奇偶匹配的最低点覆盖
pid=3360">HDU 3360 National Treasures
意甲冠军:假设a[i][j] != -1 把他转成二进制 最多有12位 代表题目那张图的12个位置 假设相应位是1 说明在那里放一个守卫能够看住a[i][j]位置上的这个东西
思路:明显死最小点覆盖 奇偶匹配建图
- #include <cstdio>
- #include <cstring>
- #include <vector>
- using namespace std;
- const int maxn = 55;
- int vis[maxn*maxn];
- int y[maxn*maxn];
- vector <int> G[maxn*maxn];
- int n, m;
- int a[maxn][maxn];
- int dir[12][2] = {-1, -2, -2, -1, -2, 1, -1, 2, 1, 2, 2, 1, 2, -1, 1, -2, -1, 0, 0, 1, 1, 0, 0, -1};
- bool dfs(int u)
- {
- for(int i = 0; i < G[u].size(); i++)
- {
- int v = G[u][i];
- if(vis[v])
- continue;
- vis[v] = true;
- if(y[v] == -1 || dfs(y[v]))
- {
- y[v] = u;
- return true;
- }
- }
- return false;
- }
- int match()
- {
- int ans = 0;
- memset(y, -1, sizeof(y));
- for(int i = 0; i < n; i++)
- {
- for(int j = 0; j < m; j++)
- {
- if((i+j)%2)
- {
- memset(vis, 0, sizeof(vis));
- if(dfs(i*m+j))
- ans++;
- }
- }
- }
- return ans;
- }
- int main()
- {
- int cas = 1;
- while(scanf("%d %d", &n, &m) && (n||m))
- {
- for(int i = 0; i < n; i++)
- for(int j = 0; j < m; j++)
- scanf("%d", &a[i][j]);
- for(int i = 0; i < n*m; i++)
- G[i].clear();
- for(int i = 0; i < n; i++)
- {
- for(int j = 0; j < m; j++)
- {
- int x = a[i][j];
- if(x == -1)
- continue;
- for(int k = 0; k < 12; k++, x >>= 1)
- {
- if(!x)
- break;
- if(!(x&1))
- continue;
- int xx = i + dir[k][0];
- int yy = j + dir[k][1];
- if(xx < 0 || xx >= n || yy < 0 || yy >= m)
- continue;
- if(a[xx][yy] == -1)
- continue;
- if((i+j)%2)
- G[i*m+j].push_back(xx*m+yy);
- else
- G[xx*m+yy].push_back(i*m+j);
- }
- }
- }
- printf("%d. %d\n", cas++, match());
- }
- return 0;
- }
版权声明:本文博客原创文章。博客,未经同意,不得转载。
HDU 3360 National Treasures 奇偶匹配的最低点覆盖的更多相关文章
- HDU 3360 National Treasures(二分匹配,最小点覆盖)
National Treasures Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Other ...
- HDU 3360 National Treasures(最小点覆盖)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3360 题目大意: 在一个n*m的格子中,每个格子有一个数值,-1表示空,其余表示财宝.每个财宝的数值转 ...
- HDU 3360 National Treasures
题目大意:大厅每个位置都有一个文物或者一个守卫,文物是安全的前提是: 关键位置上必须有一个守卫,或者文物本身的位置上有一个守卫.求保证每个文物是安全的守卫的最少数量. #include <cst ...
- HDU 1083 网络流之二分图匹配
http://acm.hdu.edu.cn/showproblem.php?pid=1083 二分图匹配用得很多 这道题只需要简化的二分匹配 #include<iostream> #inc ...
- hdu 5727 Necklace dfs+二分图匹配
Necklace/center> 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5727 Description SJX has 2*N mag ...
- hdu 2255 二分图最大权匹配 *
题意:说在遥远的地方有一个非常富裕的村落,有一天,村长决定进行制度改革:重新分配房子.这可是一件大事,关系到人民的住房问题啊.村里共有n间房间,刚好有n家老百姓,考虑到每家都要有房住(如果有老百姓没房 ...
- HDU 1010 (DFS搜索+奇偶剪枝)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1010 题目大意:给定起点和终点,问刚好在t步时能否到达终点. 解题思路: 4个剪枝. ①dep&g ...
- HDU(1853),最小权匹配,KM
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1853 Cyclic Tour Time Limit: 1000/1000 MS (Java/Other ...
- HDU(3605),二分图多重匹配
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3605 Escape Time Limit: 4000/2000 MS (Java/Others) ...
随机推荐
- 详解HTML的a标签(超链接标签)
原文 简书原文:https://www.jianshu.com/p/d6a2499db73b 大纲 1.什么是<a>标签 2.<a>标签的几个重要属性 3.a标签的运行机制 4 ...
- shell脚本if条件总结
原文链接:https://geniuspeng.github.io/2018/03/12/shell-if/ shell编程中,if-then是一种常见的控制流命令,而if的条件判断一般采用内置命令t ...
- Java解惑八:很多其它库之谜
本文是依据JAVA解惑这本书,做的笔记. 电子书见:http://download.csdn.net/detail/u010378705/7527721 谜题76 将线程的启动方法start(),写成 ...
- 用live555将内网摄像机视频推送到外网server,附源代码
近期非常多人问,怎样将内网的摄像机流媒体数据公布到公网,假设用公网与局域网间的port映射方式太过麻烦,一个摄像机要做一组映射,并且不是每个局域网都是有固定ip地址,即使外网主机配置好了每个摄像机的映 ...
- iOS开发SDWebImage的基本使用
#import "ViewController.h" #import "UIImageView+WebCache.h" #import "SDWebI ...
- 【41.43%】【codeforces 560C】Gerald's Hexagon
time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...
- eclipse jdt
http://www.cnblogs.com/hoojo/p/use_eclipse_ant_javac_JDT_compiler_class.html
- js实现表格配对小游戏
js实现表格配对小游戏 一.总结 一句话总结: 二.js实现表格配对 1.配对游戏案例说明 实例描述: 当用户点击两个相同的图案或字符后配对成功,全部配对成功后游戏获胜 案例008采用了大家常见的小游 ...
- Web开发标配--开发人员工具-JS调试
喜欢从业的专注,七分学习的态度. JS:全称JavaScript,Web中,js主要在两个地方: html的<script type="text/javascript"> ...
- NOIP模拟 Math - 数学
题目大意: 给定a,n(\(a \le 1e9, n\le30\)),求有多少\(b(1 \le b \le 2^n)\)满足:\(a^b \equiv b^a(mod 2^n)\). 题目分析: 数 ...