P3231 [HNOI2013]消毒
二维覆盖我们已经很熟悉了
扩展到三维,枚举其中较小的一维,这里定义为$a$
以$a$为关键字状压,$1$表示该面全选
剩下的面和二维覆盖一样二分图匹配
如果还没接触过二维覆盖,简要地说一下
代价是$min(x,y)$,假设$x$比$y$小,全染相当于染$x$次$1×y$的区域,故全染不如一条一条染

My complete code:
#include<cstdio>
#include<cstring>
#include<string>
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long LL;
const LL inf=0x3f3f3f3f;
const LL maxn=6000;
inline LL Read(){
LL x=0,f=1; char c=getchar();
while(c<'0'||c>'9'){
if(c=='-') f=-1; c=getchar();
}
while(c>='0'&&c<='9'){
x=x*10+c-'0'; c=getchar();
}return x*f;
}
struct node{
LL to,next;
}dis[6000000];
LL a,b,c,T,num,cnt,ans,minn,up;
LL head[maxn],visit[maxn],mat[maxn],que[4][maxn];
bool piece[maxn];
inline void Add(LL u,LL v){
dis[++num]=(node){v,head[u]}; head[u]=num;
}
bool Dfs(LL u,LL val){
for(LL i=head[u];i;i=dis[i].next){
LL v=dis[i].to;
if(visit[v]!=val){
visit[v]=val;
if(!mat[v]){
mat[v]=u;
return true;
}else if(Dfs(mat[v],val)){
mat[v]=u;
return true;
}
}
}
return false;
}
inline void Solve(LL bit){
LL sum=0;
for(LL i=1;i<=a;++i)
if((bit>>(i-1))&1){
piece[i]=false,
++sum;
}else
piece[i]=true;
num=0;
for(LL i=1;i<=b;++i)
head[i]=0;
for(LL i=1;i<=cnt;++i)
if(piece[que[1][i]])
Add(que[2][i],que[3][i]);
for(LL i=1;i<=c;++i)
mat[i]=0,
visit[i]=0;
for(LL i=1;i<=b;++i)
if(Dfs(i,i))
++sum;
ans=min(ans,sum);
}
int main(){
T=Read();
while(T--){
cnt=0;
a=Read(),b=Read(),c=Read();
for(LL i=1;i<=a;++i)
for(LL j=1;j<=b;++j)
for(LL k=1;k<=c;++k)
if(Read()){
que[1][++cnt]=i,
que[2][cnt]=j,
que[3][cnt]=k;
}
minn=min(a,min(b,c));
if(minn==b){
swap(a,b);
swap(que[1],que[2]);
}else if(minn==c){
swap(a,c);
swap(que[1],que[3]);
}
up=(1<<a); ans=inf;
for(LL i=0;i<up;++i)
Solve(i);
printf("%lld\n",ans);
}
return 0;
}
P3231 [HNOI2013]消毒的更多相关文章
- [BZOJ3140][HNOI2013]消毒(二分图最小点覆盖)
3140: [Hnoi2013]消毒 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1621 Solved: 676[Submit][Status] ...
- bzoj 3140: [Hnoi2013]消毒
3140: [Hnoi2013]消毒 Description 最近在生物实验室工作的小T遇到了大麻烦. 由于实验室最近升级的缘故,他的分格实验皿是一个长方体,其尺寸为a*b*c,a.b.c 均为正整数 ...
- BZOJ3140:[HNOI2013]消毒——题解
http://www.lydsy.com/JudgeOnline/problem.php?id=3140 https://www.luogu.org/problemnew/show/P3231 最近在 ...
- 3140:[HNOI2013]消毒 - BZOJ
题目描述 Description 最近在生物实验室工作的小 T 遇到了大麻烦. 由于实验室最近升级的缘故,他的分格实验皿是一个长方体,其尺寸为 a*b*c,a.b.c均为正整数.为了实验的方便,它被划 ...
- bzoj3140: [Hnoi2013]消毒
Description 最近在生物实验室工作的小T遇到了大麻烦. 由于实验室最近升级的缘故,他的分格实验皿是一个长方体,其尺寸为a*b*c,a.b.c 均为正整数.为了实验的方便,它被划分为a*b*c ...
- 【刷题】BZOJ 3140 [Hnoi2013]消毒
Description 最近在生物实验室工作的小T遇到了大麻烦. 由于实验室最近升级的缘故,他的分格实验皿是一个长方体,其尺寸为abc,a.b.c 均为正整数.为了实验的方便,它被划分为abc个单位立 ...
- bzoj3140: [Hnoi2013]消毒(二分图)
题目描述 最近在生物实验室工作的小T遇到了大麻烦. 由于实验室最近升级的缘故,他的分格实验皿是一个长方体,其尺寸为a*b*c,a.b.c 均为正整数.为了实验的方便,它被划分为a*b*c个单位立方体区 ...
- [luogu3231 HNOI2013] 消毒 (二分图最小点覆盖)
传送门 Description 最近在生物实验室工作的小T遇到了大麻烦. 由于实验室最近升级的缘故,他的分格实验皿是一个长方体,其尺寸为abc,a.b.c 均为正整数.为了实验的方便,它被划分为abc ...
- [HNOI2013]消毒
题目大意: 网址:https://www.luogu.org/problemnew/show/3231 大意:a×b×c的三维空间里有a×b×c个点(x,y,z),其中有些点需要被消除. 消除的方法为 ...
随机推荐
- C++面试试题汇总1
1.C和C++的主要区别是什么? 答:1.C++语言包括过程性语言部分和类部分,过程性语言部分与C并无本质的差别,类部分是C语言中所没有的,它是面向对象程序设计的主体. 2.程序设计方法上已从结构化程 ...
- mysql 升序 字段值为NULL 排在后面
select * from yryz_products_t order by isnull(sort),sort;
- 【Python】合并(拼接)字符串
在很多情况下,我们都需要合并字符串.例如:需要将姓氏与名字存储在不同的变量中,然后显示的时候再将他们合二为一 first_name = 'oliver' last_name = 'smith' ful ...
- robotframework使用之 下拉框的选择
选择下拉框有几种方式处理,首先在浏览器F12选择下拉框 1. F12后看见下拉框的源码是<option xxx> <select class="w_60" dat ...
- 阿里云官方教程 Linux 系统挂载数据盘
适用系统:Linux(Redhat , CentOS,Debian,Ubuntu) * Linux的云服务器数据盘未做分区和格式化,可以根据以下步骤进行分区以及格式化操作. 下面的操作将会把数据盘划 ...
- C#高级编程八十一天----捕获异常
捕获异常 前面主要说了关于异常的一些基础和理论知识,没有进入到正真的异常案例,这一讲通过几个案例来描写叙述一下异常的捕获和处理. 案例代码: using System; using System.Co ...
- 每门课由平时成绩和考试成绩组成,满分为r。现在他知道每门课的平时成绩为ai ,若想让这门课的考试成绩多拿一分的话,小v要花bi 的时间复习,不复习的话当然就是0分。同时我们显然可以发现复习得再多也不会拿到超过满分的分数。为了拿到奖学金,小v至少要花多少时间复习。
遇到问题要常思考为什么,做这道题的时候,要注意给定的数据范围. 第一行三个整数n,r,avg(n大于等于1小于等于1e5,r大于等于1小于等于1e9,avg大于等于1小于等于1e6),接下来n行,每行 ...
- JavaScript读书笔记(6)-Function
Function类型 ECMAScript中函数是对象,每个函数都是Function类型的实例,也有属性和方法,函数是对象,函数名实际上市一个指向函数对象的指针,不会与某个函数绑定: function ...
- Ubuntu下安装Oracle JRE运行环境
安装Oracle JDK -linux-i586.tar.gz安装参见在Ubuntu下利用Eclipse调试FFmpeg Linux x64:链接:http://pan.baidu.com/s/1gd ...
- C#中图片.BYTE[]和base64string的转换
在C#中 图片到byte[]再到base64string的转换: Bitmap bmp = new Bitmap(filepath); MemoryStream ms = ...