题目链接

依然是重复覆盖的模板....

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define pb(x) push_back(x)
  4. #define ll long long
  5. #define mk(x, y) make_pair(x, y)
  6. #define lson l, m, rt<<1
  7. #define mem(a) memset(a, 0, sizeof(a))
  8. #define rson m+1, r, rt<<1|1
  9. #define mem1(a) memset(a, -1, sizeof(a))
  10. #define mem2(a) memset(a, 0x3f, sizeof(a))
  11. #define rep(i, a, n) for(int i = a; i<n; i++)
  12. #define ull unsigned long long
  13. typedef pair<int, int> pll;
  14. const double PI = acos(-1.0);
  15. const double eps = 1e-;
  16. const int mod = 1e9+;
  17. const int inf = ;
  18. const int dir[][] = { {-, }, {, }, {, -}, {, } };
  19. const int maxn = ;
  20. const int maxNode = ;
  21. struct DLX {
  22. int L[maxNode], R[maxNode], U[maxNode], D[maxNode], row[maxNode], col[maxNode];
  23. int S[maxn], H[maxn], deep, ans[maxn], sz, n, m;
  24. void remove(int c) {
  25. for(int i = D[c]; i!=c; i = D[i]) {
  26. L[R[i]] = L[i];
  27. R[L[i]] = R[i];
  28. }
  29. }
  30. void resume(int c) {
  31. for(int i = U[c]; i!=c; i = U[i]) {
  32. L[R[i]] = i;
  33. R[L[i]] = i;
  34. }
  35. }
  36. int h() {
  37. int cnt = ;
  38. int vis[];
  39. mem(vis);
  40. for(int i = R[]; i!=; i = R[i]) {
  41. if(!vis[i]) {
  42. cnt++;
  43. vis[i] = ;
  44. for(int j = D[i]; j!=i; j = D[j]) {
  45. for(int k = R[j]; k!=j; k = R[k]) {
  46. vis[col[k]] = ;
  47. }
  48. }
  49. }
  50. }
  51. return cnt;
  52. }
  53. void dfs(int d) {
  54. if(d+h()>=deep)
  55. return ;
  56. if(R[] == ) {
  57. deep = min(deep, d);
  58. return ;
  59. }
  60. int c = R[];
  61. for(int i = R[]; i!=; i = R[i])
  62. if(S[c]>S[i])
  63. c = i;
  64. for(int i = D[c]; i!=c; i = D[i]) {
  65. remove(i);
  66. for(int j = R[i]; j!=i; j = R[j])
  67. remove(j);
  68. dfs(d+);
  69. for(int j = L[i]; j!=i; j = L[j])
  70. resume(j);
  71. resume(i);
  72. }
  73. return ;
  74. }
  75. void add(int r, int c) {
  76. sz++;
  77. row[sz] = r;
  78. col[sz] = c;
  79. S[c]++;
  80. U[sz] = U[c];
  81. D[sz] = c;
  82. D[U[c]] = sz;
  83. U[c] = sz;
  84. if(~H[r]) {
  85. R[sz] = H[r];
  86. L[sz] = L[H[r]];
  87. L[R[sz]] = sz;
  88. R[L[sz]] = sz;
  89. } else {
  90. H[r] = L[sz] = R[sz] = sz;
  91. }
  92. }
  93. void init(){
  94. mem1(H);
  95. deep = inf;
  96. for(int i = ; i<=n; i++) {
  97. R[i] = i+;
  98. L[i] = i-;
  99. U[i] = i;
  100. D[i] = i;
  101. }
  102. mem(S);
  103. R[n] = ;
  104. L[] = n;
  105. sz = n;
  106. }
  107. int gra[][];
  108. void solve() {
  109. char g[][];
  110. for(int i = ; i<n; i++) {
  111. scanf("%s", g[i]);
  112. }
  113. int cnt = ;
  114. for(int i = ; i<n; i++) {
  115. for(int j = ; j<m; j++) {
  116. if(g[i][j]=='*')
  117. gra[i][j] = -;
  118. if(g[i][j] == '.')
  119. gra[i][j] = ;
  120. if(g[i][j] == '#')
  121. gra[i][j] = ++cnt;
  122. }
  123. }
  124. int r = , tmp = n;
  125. n = cnt;
  126. init();
  127. for(int i = ; i<tmp; i++) {
  128. for(int j = ; j<m; j++) {
  129. if(!gra[i][j]) {
  130. r++;
  131. for(int k = ; k<; k++) {
  132. int tmpx = i, tmpy = j;
  133. while() {
  134. tmpx += dir[k][];
  135. tmpy += dir[k][];
  136. if(gra[tmpx][tmpy]) {
  137. if(gra[tmpx][tmpy]>) {
  138. add(r, gra[tmpx][tmpy]);
  139. }
  140. break;
  141. }
  142. }
  143. }
  144. }
  145. }
  146. }
  147. dfs();
  148. cout<<deep<<endl;
  149. }
  150. }dlx;
  151. int main()
  152. {
  153. int n, m;
  154. while(~scanf("%d%d", &dlx.n, &dlx.m)) {
  155. dlx.solve();
  156. }
  157. return ;
  158. }

hdu 3529 Bomberman - Just Search! 重复覆盖的更多相关文章

  1. HDU 5046 Airport【DLX重复覆盖】

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5046 题意: 给定n个城市的坐标,要在城市中建k个飞机场,使城市距离最近的飞机场的最长距离最小,求这 ...

  2. HDU 3335 Divisibility dancing links 重复覆盖

    分析: dlx重复覆盖的巧用,重复覆盖的原理恰好符合本题的筛选方式,即选择一个数后,该数的倍数或约数可以保证在之后的搜索中不会被选择 于是修改一下启发函数,求解最大的重复覆盖即可.   其实不一定不被 ...

  3. HDU 2295 Radar dancing links 重复覆盖

    就是dancing links 求最小支配集,重复覆盖 精确覆盖时:每次缓存数据的时候,既删除行又删除列(这里的删除列,只是删除表头) 重复覆盖的时候:只删除列,因为可以重复覆盖 然后重复覆盖有一个估 ...

  4. [ACM] HDU 2295 Radar (二分法+DLX 重复覆盖)

    Radar Problem Description N cities of the Java Kingdom need to be covered by radars for being in a s ...

  5. hdu 4735Little Wish~ lyrical step~ 重复覆盖

    题目链接 给出一棵树, 树上点的值为0或1, 可以交换树上两个点的权值, 给出一个距离m, 所有的0距离最近的1的距离不能超过m, 求最少的交换次数. 首先对于每一个点u,所有离u的距离不超过m的点v ...

  6. HDU 2295 Radar (重复覆盖)

    Radar Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

  7. HDU 3957 Street Fighter(搜索、DLX、重复覆盖+精确覆盖)

    很久以前就看到的一个经典题,一直没做,今天拿来练手.街霸 给n<=25个角色,每个角色有 1 or 2 个版本(可以理解为普通版以及爆发版),每个角色版本可以KO掉若干人. 问最少选多少个角色( ...

  8. HDU 2295.Radar (DLX重复覆盖)

    2分答案+DLX判断可行 不使用的估计函数的可重复覆盖的搜索树将十分庞大 #include <iostream> #include <cstring> #include < ...

  9. hdu 5046 Airport 二分+重复覆盖

    题目链接 给n个点, 定义两点之间距离为|x1-x2|+|y1-y2|. 然后要选出k个城市建机场, 每个机场可以覆盖一个半径的距离. 求在选出点数不大于k的情况下, 这个半径距离的最大值. 二分半径 ...

随机推荐

  1. JS继承,原型继承,构造函数的继承,非构造函数"的继承

    a.原型继承 一.new运算符的缺点 用构造函数生成实例对象,有一个缺点,那就是无法共享属性和方法.比如,在DOG对象的构造函数中,设置一个实例对象的共有属性species. function DOG ...

  2. ASP.NET不通过添加web引用的方式调用web service接口

    尊重原著作:本文转载自http://bbs.csdn.net/topics/360223969 创建方法 //动态调用web服务 public static object InvokeWebSer(s ...

  3. House Robber & House Robber II

    You are a professional robber planning to rob houses along a street. Each house has a certain amount ...

  4. Linux学习之sed命令详解

    概述 sed是stream editor的简称,也就是流编辑器.它一次处理一行内容,处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区 ...

  5. mysql触发器使用注意

    1.在创建触发器的时候,语句中避免在一个select语句查询多个列,例如使用select a,b from table,应该分开使用select语句, 例如select a from table  s ...

  6. VB EditGrid的用法

    百度了一下,关于vb 6.0 EditGrid的用法 查不到资料

  7. mini-httpd源码分析-match.h

    //字符串匹配,匹配返回 1,否则返回 0. //pattern可以通过任意个 | 字符,组合match_one中pattern的功能 int match(const char* pattern, c ...

  8. c/c++实现混合编程

    在开发中大家经常会使用到c与c++混合编程,这样能够更好的实现功能模块.刚学习了一下c和c++的混合编程,参考了网上的相关知识,在这里留下要点,方便以后进行查阅. 1.extern关键字 extern ...

  9. rsyslog 传输mysql 日志

    在另外一种环境中,让我们假定你已经在机器上安装了一个名为"foobar"的应用程序,它会在/var/log下生成foobar.log日志文件.现在,你想要将它的日志定向到rsysl ...

  10. c++游戏编程书籍

    如果要自学游戏程序开发的话,可以看看下面的,呵呵. 游戏开发资料(PDF书都是中文版的,非英文,很多是本人自己扫描制作,从未网上发布过,所以独家啦):  1.Gamebryo 2.2游戏引擎(盛大.腾 ...