bzoj3140
首先考虑二维的情况
min(x,y)也就意味着确定最小后,另外一维肯定打满
然后最小那个如果是k的话就相当于用k*1次——这不就是行列覆盖吗,二分图秒之
三维呢?考虑到a*b*c<=5000也就是最小的那维不超过17
那么我们直接穷举那维用哪些,然后另外的就跟二维一样了
注意要优化常数
- type node=record
- po,next:longint;
- end;
- var e:array[..] of node;
- d:array[..,..] of longint;
- p,cx,cy:array[..] of longint;
- v:array[..] of boolean;
- can,f:array[..] of boolean;
- x,tt,j,k,len,ans,i,t,a,b,c,a0,b0,c0:longint;
- function max(a,b:longint):longint;
- begin
- if a>b then exit(a) else exit(b);
- end;
- procedure add(x,y:longint);
- begin
- inc(len);
- e[len].po:=y;
- e[len].next:=p[x];
- p[x]:=len;
- end;
- procedure swap(var a,b:longint);
- var c:longint;
- begin
- c:=a;
- a:=b;
- b:=c;
- end;
- function dfs(x:longint):longint;
- var i,y:longint;
- begin
- i:=p[x];
- while i<> do
- begin
- y:=e[i].po;
- if not v[y] then
- begin
- v[y]:=true;
- if (cy[y]=-) or (dfs(cy[y])=) then
- begin
- cy[y]:=x;
- cx[x]:=y;
- exit();
- end;
- end;
- i:=e[i].next;
- end;
- exit();
- end;
- function cal(s:longint):longint;
- var i,j:longint;
- begin
- cal:=s;
- len:=;
- for i:= to b do
- begin
- p[i]:=;
- cx[i]:=-;
- end;
- for i:= to c do
- cy[i]:=-;
- for i:= to t do
- if not f[d[i,a0]] then
- add(d[i,b0],d[i,c0]);
- for i:= to b do
- if cx[i]=- then
- begin
- for j:= to c do
- v[j]:=false;
- cal:=cal+dfs(i);
- if cal>=ans then exit;
- end;
- end;
- procedure work(x,s:longint);
- var m:longint;
- begin
- if s>=ans then exit;
- if x=a+ then
- begin
- m:=cal(s);
- if m<ans then ans:=m;
- end
- else begin
- f[x]:=false;
- work(x+,s);
- if can[x] then
- begin
- f[x]:=true;
- work(x+,s+);
- f[x]:=false;
- end;
- end;
- end;
- begin
- readln(tt);
- while tt> do
- begin
- dec(tt);
- readln(a,b,c);
- a0:=; b0:=; c0:=;
- t:=;
- for i:= to a do
- for j:= to b do
- for k:= to c do
- begin
- read(x);
- if x= then
- begin
- inc(t);
- d[t,]:=i;
- d[t,]:=j;
- d[t,]:=k;
- end;
- end;
- if (b<=a) and (b<=c) then
- begin
- swap(a0,b0);
- swap(a,b);
- end
- else if (c<=a) and (c<=b) then
- begin
- swap(a0,c0);
- swap(a,c);
- end;
- if b>c then
- begin
- swap(b0,c0);
- swap(b,c);
- end;
- fillchar(can,sizeof(can),false);
- for i:= to t do
- can[d[i,a0]]:=true;
- ans:=;
- for i:= to a do
- if can[i] then inc(ans);
- fillchar(f,sizeof(f),false);
- work(,);
- writeln(ans);
- end;
- end.
bzoj3140的更多相关文章
- 【BZOJ3140】消毒(二分图匹配)
[BZOJ3140]消毒(二分图匹配) 题面 Description 最近在生物实验室工作的小T遇到了大麻烦. 由于实验室最近升级的缘故,他的分格实验皿是一个长方体,其尺寸为abc,a.b.c 均为正 ...
- bzoj3140: [Hnoi2013]消毒
Description 最近在生物实验室工作的小T遇到了大麻烦. 由于实验室最近升级的缘故,他的分格实验皿是一个长方体,其尺寸为a*b*c,a.b.c 均为正整数.为了实验的方便,它被划分为a*b*c ...
- bzoj千题计划295:bzoj3140: [Hnoi2013]消毒
http://www.lydsy.com/JudgeOnline/problem.php?id=3140 如果只有两维,那就是二分图最小点覆盖 现在是三维,但是a*b*c<=5000,说明最小的 ...
- [BZOJ3140][HNOI2013]消毒(二分图最小点覆盖)
3140: [Hnoi2013]消毒 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1621 Solved: 676[Submit][Status] ...
- BZOJ3140:[HNOI2013]消毒——题解
http://www.lydsy.com/JudgeOnline/problem.php?id=3140 https://www.luogu.org/problemnew/show/P3231 最近在 ...
- bzoj3140: [Hnoi2013]消毒(二分图)
题目描述 最近在生物实验室工作的小T遇到了大麻烦. 由于实验室最近升级的缘故,他的分格实验皿是一个长方体,其尺寸为a*b*c,a.b.c 均为正整数.为了实验的方便,它被划分为a*b*c个单位立方体区 ...
- [BZOJ3140][HNOI2013]消毒:二分图匹配
分析 假如实验皿是二维的,那么这道题便是一个二分图最小点覆盖问题,可以转化为二分图最大匹配问题,使用匈牙利算法解决. 考虑如何扩展到三维,首先我们发现一次操作的代价为\(min(x,y,z)\).不难 ...
- 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题) ...
- Hnoi2013题解 bzoj3139~3144
话说好久没写题(解)了.. 先贴份题解:http://wjmzbmr.com/archives/hnoi-2013-%E9%A2%98%E8%A7%A3/(LJ神题解..Lazycal表示看不懂..) ...
随机推荐
- 数据缓存iOS
有时候,对同一个URL请求多次,返回的数据可能都是一样的,比如服务器上的某张图片,无论下载多少次,返回的数据都是一样的. 上面的情况会造成以下问题 (1)用户流量的浪费(2)程序响应速度不够快 解决上 ...
- 3243: [Noi2013]向量内积 - BZOJ
Description 两个d 维向量A=[a1,a2,...,ad]与B=[b1,b2,...,bd]的内积为其相对应维度的权值的乘积和,即: 现有 n 个d 维向量x1,...,xn ,小喵喵想知 ...
- MemSQL Start[c]UP 2.0 - Round 1
A. Eevee http://codeforces.com/contest/452/problem/A 字符串水题 #include<cstdio> #include<cstrin ...
- 1-Highcharts环境介绍及配置
Highcharts:功能强大.开源.美观.图表丰富.兼容绝大多数浏览器的纯js图表库,废话不多说,直接进入主题! 首先,下载Highcharts包文件,下载地址如下: 中文网下载中心:http:// ...
- reset内容
/*reset */div,p,a,span,body,dl,dt,dd,header,footer,img,section,time,h2,em,article,h3,h4,ul,li,labe ...
- hdoj 1596 find the safest road
题目传送:http://acm.hdu.edu.cn/showproblem.php?pid=1596 分析:Dijkstra变体,最短路径判断计算方式:Safe(P) = s(e1)*s(e2)…* ...
- jQuery经典面试题及答案精选[转载]
问题:jQuery的美元符号$有什么作用? 回答:其实美元符号$只是”jQuery”的别名,它是jQuery的选择器,如下代码: $(document).ready(function(){ }); 当 ...
- this指针指向的彻底理解
首先必须要说的是,this的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确定this到底指向谁,实际上this的最终指向的是那个调用它的对象(这句话有些问题,后面会解释为什么会有问题,虽然 ...
- Project Euler 87 :Prime power triples 素数幂三元组
Prime power triples The smallest number expressible as the sum of a prime square, prime cube, and pr ...
- 【mongoDB基础篇①】安装与常用操作语句
简述 mongoDB与redis同为noSql数据库,但是redis为kv数据库(key/value),而mongoDB为文档型数据库存储的是文档(Bson->json的二进制化).内部执行引擎 ...