【BZOJ】3140: [Hnoi2013]消毒
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3140
猜一发(显然)有结论:每次一定选择一个平面,即每次操作对答案的贡献都为$1$
首先可以考虑二维的情况。
二维不就是一个经典的最小点覆盖模型么,如果${(x,y)=1}$就把横纵轴上的点分别看为二分图的两边的点,最小点覆盖模型=最大匹配数。
三维?
${a*b*c<=5000}$显然${Max\left \{ a,b,c \right \}<=17}$
考虑枚举(搜索)最小的那一维,剩下的直接看(拍)成一个平面当成二维的做即可。
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<vector>
#include<cstdlib>
#include<cmath>
#include<cstring>
using namespace std;
#define maxn 1000100
#define llg long long
#define yyj(a) freopen(a".in","r",stdin),freopen(a".out","w",stdout);
llg n,G,C,K,T,cnt,N,belong[maxn],bj[maxn]; vector<llg>a[maxn]; struct node
{
llg x,y,z;
}point[maxn]; void init()
{
llg x;
cnt=;
scanf("%lld%lld%lld",&C,&K,&G);
for (llg i=;i<=C;i++)
for (llg j=;j<=K;j++)
for (llg k=;k<=G;k++)
{
scanf("%lld",&x);
if (x) point[++cnt]=(node){i,j,k};
}
} bool find(llg x)
{
llg w=a[x].size(),v;
for (llg i=;i<w;i++)
{
v=a[x][i];
if (bj[v]) continue;
bj[v]=;
if (!belong[v] || find(belong[v]))
{
belong[v]=x; belong[x]=v;
return ;
}
}
return ;
} llg work(llg zt)
{
llg sum=; N=C+K;
for (llg i=;i<=N;i++) a[i].clear(),belong[i]=;
for (llg i=;i<G;i++) if ((zt&(<<i))==) sum++;
for (llg i=;i<=cnt;i++)
if (zt&(<<(point[i].z-)))
{
llg x=point[i].x,y=C+point[i].y;
a[x].push_back(y),a[y].push_back(x);
}
for (llg i=;i<=N;i++)
if (!belong[i])
{
for (llg j=;j<=N;j++) bj[j]=;
if (find(i)) sum++;
}
return sum;
} int main()
{
yyj("clear");
cin>>T;
while (T--)
{
init();
if (C<G) {swap(G,C); for (llg i=;i<=cnt;i++) swap(point[i].x,point[i].z); }
if (K<G) {swap(G,K); for (llg i=;i<=cnt;i++) swap(point[i].y,point[i].z); }
llg ans=(llg)1e16;
for (llg i=;i<(<<G);i++)
ans=min(work(i),ans);
printf("%lld\n",ans);
}
return ;
}
【BZOJ】3140: [Hnoi2013]消毒的更多相关文章
- bzoj 3140: [Hnoi2013]消毒
3140: [Hnoi2013]消毒 Description 最近在生物实验室工作的小T遇到了大麻烦. 由于实验室最近升级的缘故,他的分格实验皿是一个长方体,其尺寸为a*b*c,a.b.c 均为正整数 ...
- 【刷题】BZOJ 3140 [Hnoi2013]消毒
Description 最近在生物实验室工作的小T遇到了大麻烦. 由于实验室最近升级的缘故,他的分格实验皿是一个长方体,其尺寸为abc,a.b.c 均为正整数.为了实验的方便,它被划分为abc个单位立 ...
- BZOJ.3140.[HNOI2013]消毒(二分图匹配 匈牙利)
题目链接 不难想到每次一定是切一片. 如果是平面,很容易想到直接做二分图匹配.对于3维的? 可以发现min(a,b,c)的最大值只有\(\sqrt[3]{n}≈17\),我们暴力枚举这一最小值代表的是 ...
- 3140:[HNOI2013]消毒 - BZOJ
题目描述 Description 最近在生物实验室工作的小 T 遇到了大麻烦. 由于实验室最近升级的缘故,他的分格实验皿是一个长方体,其尺寸为 a*b*c,a.b.c均为正整数.为了实验的方便,它被划 ...
- [BZOJ3140][HNOI2013]消毒(二分图最小点覆盖)
3140: [Hnoi2013]消毒 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1621 Solved: 676[Submit][Status] ...
- [BZOJ 3140] 消毒
Link: BZOJ 3140 传送门 Solution: 挺好的一道暴力题 首先发现可以每次贪心选择宽度为1的一面,即$1*x*y,1*x*z,1*y*z$ 那么对于与该面垂直的面,相当于解决了一行 ...
- P3231 [HNOI2013]消毒
P3231 [HNOI2013]消毒 二维覆盖我们已经很熟悉了 扩展到三维,枚举其中较小的一维,这里定义为$a$ 以$a$为关键字状压,$1$表示该面全选 剩下的面和二维覆盖一样二分图匹配 如果还没接 ...
- BZOJ 3140 消毒(最小顶点覆盖)
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=3140 题意:最近在生物实验室工作的小T遇到了大麻烦. 由于实验室最近升级的缘故,他的分格 ...
- bzoj千题计划295:bzoj3140: [Hnoi2013]消毒
http://www.lydsy.com/JudgeOnline/problem.php?id=3140 如果只有两维,那就是二分图最小点覆盖 现在是三维,但是a*b*c<=5000,说明最小的 ...
随机推荐
- 使用WebClient下载网页,用正则匹配需要的内容
WebClient是一个操作网页的类 webClient web=new WebClient(): web.DownloadString(网页的路径,可以是本地路径);--采用的本机默认的编码格式 ...
- Kattis之旅——Factovisors
The factorial function, n! is defined thus for n a non-negative integer: 0! = 1 n! = n * (n-1)! (n & ...
- camera按键采集图像及waitKey的用法(转)
源: camera按键采集图像及waitKey的用法
- 在nginx的http模块下面,一个server就可以看做一个站点,配置形式大概是这样的:
http { index index.php index.htm index.html; server { server_name www.site1.com; location / { # [... ...
- Golang利用select实现超时机制
所谓超时,比如上网浏览一些安全的网站,如果几分钟之后不做操作,那么就会让你重新登录.就所谓有时候出现goroutine阻塞的情况,那么我们如何避免整个程序进入阻塞情况,这时候就可以用select来设置 ...
- Golang并发编程有缓冲通道和无缓冲通道(channel)
无缓冲通道 是指在接收前没有能力保存任何值得通道.这种类型的通道要求发送goroutine和接收goroutine同时准备好,才能完成发送和接收操作.如果两个goroutine没有同时准备好,通道会导 ...
- SQL介绍
SQL,即structured query language,结构化查询语言,是一种对关系型数据库中的数据进行管理和操作的语言方法,SQL包括6个部分 DQL:数据查询语言,最常用的为select,其 ...
- amqp 抓包
1. wireshark 2. tcpick -yR -r file.name
- matlab的三维绘图和四维绘图
一.三维绘图1.曲线图plot3(X1,Y1,Z1,...):以默认线性属性绘制三维点集(X1,Y1,Z1)确定的曲线plot3(X1,Y1,Z1,LineSpec):以参数LineSpec确定的线性 ...
- Centos7.03搭建JDK、Tomcat、MySql环境
本人linux服务器配置是:centos_7_03_64_20G_xdragon_20171025.vhd 公网IP:106.14.14.224 内存:2GB SecureCRT8.0:https:/ ...