首先考虑二维的情况

min(x,y)也就意味着确定最小后,另外一维肯定打满

然后最小那个如果是k的话就相当于用k*1次——这不就是行列覆盖吗,二分图秒之

三维呢?考虑到a*b*c<=5000也就是最小的那维不超过17

那么我们直接穷举那维用哪些,然后另外的就跟二维一样了

注意要优化常数

  1. type node=record
  2. po,next:longint;
  3. end;
  4.  
  5. var e:array[..] of node;
  6. d:array[..,..] of longint;
  7. p,cx,cy:array[..] of longint;
  8. v:array[..] of boolean;
  9. can,f:array[..] of boolean;
  10. x,tt,j,k,len,ans,i,t,a,b,c,a0,b0,c0:longint;
  11.  
  12. function max(a,b:longint):longint;
  13. begin
  14. if a>b then exit(a) else exit(b);
  15. end;
  16.  
  17. procedure add(x,y:longint);
  18. begin
  19. inc(len);
  20. e[len].po:=y;
  21. e[len].next:=p[x];
  22. p[x]:=len;
  23. end;
  24.  
  25. procedure swap(var a,b:longint);
  26. var c:longint;
  27. begin
  28. c:=a;
  29. a:=b;
  30. b:=c;
  31. end;
  32.  
  33. function dfs(x:longint):longint;
  34. var i,y:longint;
  35. begin
  36. i:=p[x];
  37. while i<> do
  38. begin
  39. y:=e[i].po;
  40. if not v[y] then
  41. begin
  42. v[y]:=true;
  43. if (cy[y]=-) or (dfs(cy[y])=) then
  44. begin
  45. cy[y]:=x;
  46. cx[x]:=y;
  47. exit();
  48. end;
  49. end;
  50. i:=e[i].next;
  51. end;
  52. exit();
  53. end;
  54.  
  55. function cal(s:longint):longint;
  56. var i,j:longint;
  57. begin
  58. cal:=s;
  59. len:=;
  60. for i:= to b do
  61. begin
  62. p[i]:=;
  63. cx[i]:=-;
  64. end;
  65. for i:= to c do
  66. cy[i]:=-;
  67. for i:= to t do
  68. if not f[d[i,a0]] then
  69. add(d[i,b0],d[i,c0]);
  70. for i:= to b do
  71. if cx[i]=- then
  72. begin
  73. for j:= to c do
  74. v[j]:=false;
  75. cal:=cal+dfs(i);
  76. if cal>=ans then exit;
  77. end;
  78. end;
  79.  
  80. procedure work(x,s:longint);
  81. var m:longint;
  82. begin
  83. if s>=ans then exit;
  84. if x=a+ then
  85. begin
  86. m:=cal(s);
  87. if m<ans then ans:=m;
  88. end
  89. else begin
  90. f[x]:=false;
  91. work(x+,s);
  92. if can[x] then
  93. begin
  94. f[x]:=true;
  95. work(x+,s+);
  96. f[x]:=false;
  97. end;
  98. end;
  99. end;
  100.  
  101. begin
  102. readln(tt);
  103. while tt> do
  104. begin
  105. dec(tt);
  106. readln(a,b,c);
  107. a0:=; b0:=; c0:=;
  108. t:=;
  109. for i:= to a do
  110. for j:= to b do
  111. for k:= to c do
  112. begin
  113. read(x);
  114. if x= then
  115. begin
  116. inc(t);
  117. d[t,]:=i;
  118. d[t,]:=j;
  119. d[t,]:=k;
  120. end;
  121. end;
  122. if (b<=a) and (b<=c) then
  123. begin
  124. swap(a0,b0);
  125. swap(a,b);
  126. end
  127. else if (c<=a) and (c<=b) then
  128. begin
  129. swap(a0,c0);
  130. swap(a,c);
  131. end;
  132. if b>c then
  133. begin
  134. swap(b0,c0);
  135. swap(b,c);
  136. end;
  137. fillchar(can,sizeof(can),false);
  138. for i:= to t do
  139. can[d[i,a0]]:=true;
  140. ans:=;
  141. for i:= to a do
  142. if can[i] then inc(ans);
  143. fillchar(f,sizeof(f),false);
  144. work(,);
  145. writeln(ans);
  146. end;
  147. end.

bzoj3140的更多相关文章

  1. 【BZOJ3140】消毒(二分图匹配)

    [BZOJ3140]消毒(二分图匹配) 题面 Description 最近在生物实验室工作的小T遇到了大麻烦. 由于实验室最近升级的缘故,他的分格实验皿是一个长方体,其尺寸为abc,a.b.c 均为正 ...

  2. bzoj3140: [Hnoi2013]消毒

    Description 最近在生物实验室工作的小T遇到了大麻烦. 由于实验室最近升级的缘故,他的分格实验皿是一个长方体,其尺寸为a*b*c,a.b.c 均为正整数.为了实验的方便,它被划分为a*b*c ...

  3. bzoj千题计划295:bzoj3140: [Hnoi2013]消毒

    http://www.lydsy.com/JudgeOnline/problem.php?id=3140 如果只有两维,那就是二分图最小点覆盖 现在是三维,但是a*b*c<=5000,说明最小的 ...

  4. [BZOJ3140][HNOI2013]消毒(二分图最小点覆盖)

    3140: [Hnoi2013]消毒 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1621  Solved: 676[Submit][Status] ...

  5. BZOJ3140:[HNOI2013]消毒——题解

    http://www.lydsy.com/JudgeOnline/problem.php?id=3140 https://www.luogu.org/problemnew/show/P3231 最近在 ...

  6. bzoj3140: [Hnoi2013]消毒(二分图)

    题目描述 最近在生物实验室工作的小T遇到了大麻烦. 由于实验室最近升级的缘故,他的分格实验皿是一个长方体,其尺寸为a*b*c,a.b.c 均为正整数.为了实验的方便,它被划分为a*b*c个单位立方体区 ...

  7. [BZOJ3140][HNOI2013]消毒:二分图匹配

    分析 假如实验皿是二维的,那么这道题便是一个二分图最小点覆盖问题,可以转化为二分图最大匹配问题,使用匈牙利算法解决. 考虑如何扩展到三维,首先我们发现一次操作的代价为\(min(x,y,z)\).不难 ...

  8. AHOI2018训练日程(3.10~4.12)

    (总计:共90题) 3.10~3.16:17题 3.17~3.23:6题 3.24~3.30:17题 3.31~4.6:21题 4.7~4.12:29题 ZJOI&&FJOI(6题) ...

  9. Hnoi2013题解 bzoj3139~3144

    话说好久没写题(解)了.. 先贴份题解:http://wjmzbmr.com/archives/hnoi-2013-%E9%A2%98%E8%A7%A3/(LJ神题解..Lazycal表示看不懂..) ...

随机推荐

  1. 数据缓存iOS

    有时候,对同一个URL请求多次,返回的数据可能都是一样的,比如服务器上的某张图片,无论下载多少次,返回的数据都是一样的. 上面的情况会造成以下问题 (1)用户流量的浪费(2)程序响应速度不够快 解决上 ...

  2. 3243: [Noi2013]向量内积 - BZOJ

    Description 两个d 维向量A=[a1,a2,...,ad]与B=[b1,b2,...,bd]的内积为其相对应维度的权值的乘积和,即: 现有 n 个d 维向量x1,...,xn ,小喵喵想知 ...

  3. MemSQL Start[c]UP 2.0 - Round 1

    A. Eevee http://codeforces.com/contest/452/problem/A 字符串水题 #include<cstdio> #include<cstrin ...

  4. 1-Highcharts环境介绍及配置

    Highcharts:功能强大.开源.美观.图表丰富.兼容绝大多数浏览器的纯js图表库,废话不多说,直接进入主题! 首先,下载Highcharts包文件,下载地址如下: 中文网下载中心:http:// ...

  5. reset内容

      /*reset */div,p,a,span,body,dl,dt,dd,header,footer,img,section,time,h2,em,article,h3,h4,ul,li,labe ...

  6. hdoj 1596 find the safest road

    题目传送:http://acm.hdu.edu.cn/showproblem.php?pid=1596 分析:Dijkstra变体,最短路径判断计算方式:Safe(P) = s(e1)*s(e2)…* ...

  7. jQuery经典面试题及答案精选[转载]

    问题:jQuery的美元符号$有什么作用? 回答:其实美元符号$只是”jQuery”的别名,它是jQuery的选择器,如下代码: $(document).ready(function(){ }); 当 ...

  8. this指针指向的彻底理解

    首先必须要说的是,this的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确定this到底指向谁,实际上this的最终指向的是那个调用它的对象(这句话有些问题,后面会解释为什么会有问题,虽然 ...

  9. Project Euler 87 :Prime power triples 素数幂三元组

    Prime power triples The smallest number expressible as the sum of a prime square, prime cube, and pr ...

  10. 【mongoDB基础篇①】安装与常用操作语句

    简述 mongoDB与redis同为noSql数据库,但是redis为kv数据库(key/value),而mongoDB为文档型数据库存储的是文档(Bson->json的二进制化).内部执行引擎 ...