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表示看不懂..) ...
随机推荐
- angular入门系列教程4
主题: 本篇主要目的就是继续完善home页下的index子页面的内容,处理一个列表,进行增删改查过滤等操作. 效果图: 细节: 主要的更改有两个,一个是修改模板index.html,还有就是增加控制器 ...
- JS中的className含义
问题描述: JS中的className含义 问题解决: className说明: className属性可以设置和返回元素的class属性 可以有两种方法来获取对象的c ...
- [转载]C# Double toString保留小数点方法
有时候double型数据需要toString(),但又想保留小数,当值为整数,比如3.00时tostring后会变为”3″,具体说明见下: 1 string str0 = i.ToString(&qu ...
- iOS开发网络编程之断点续传-NSURLConnection
最近在做一个小项目的时候,发现使用NSURLSession或者AFNNetworking进行断点续传时诸多的不便,于是自己封装了一个类来实现断点续传,在程序重新启动时仍然可以继续下载(需自己调用方法) ...
- uva 10626
dp 记忆化搜索 3个1元和1个10元的情况不能少 #include <cstdio> #include <cstdlib> #include <cmath> #i ...
- Synchronized Methods
Synchronized Methods The Java programming language provides two basic synchronization idioms: synchr ...
- crontab定时运行git命令 更新代码库
Q: http://stackoverflow.com/questions/7994663/git-push-via-cron I'm trying to run a git push fro ...
- 简单易懂的现代魔法——Play Framework攻略1
哇哈哈,寒假结束啦,于是我又开新坑了....这次的主角可是大名鼎鼎的Play Framework!!那么闲话少说,开始攻略吧! 1.什么是Play Framework? 大名鼎鼎的play frame ...
- Android 虚拟机安装SD卡
在cmd命令行下,进入platform-tools目录下. 1.创建sdcard mksdcard -l mycard 256M E:\android\myCards\mysdcard.img ...
- httpclient发送multipart/form-data类型参数和用MultipartRequest接收参数
一.利用HttpClient发送基于Content-Type="multipart/form-data"形式的表单 package com.test.httpclient; imp ...