【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,说明最小的 ...
随机推荐
- Codeforces 237A - Free Cash
题目链接:http://codeforces.com/problemset/problem/237/A Valera runs a 24/7 fast food cafe. He magically ...
- bzoj1606
题目链接 反着循环就是每个东西只能选一次 #include<iostream> #include<cstdio> #include<cstdlib> #includ ...
- Java学习路线教程之JDBC基本操作
为了帮助大家熟练应用JDBC编程,接下来,在本节将通过一个综合案例来讲解JDBC的基本操作,确保大家能够深刻理解JDBC的增.删.改.查,灵活利用JDBC完成对数据库的各项操作. 1. 创建一个Jav ...
- 计算概论(A)/基础编程练习2(8题)/5:点和正方形的关系
#include<stdio.h> #include<math.h> int main() { // 输入坐标 float x, y; while(scanf("%f ...
- Delphi 如何访问监控摄像头?
源: Delphi 如何访问监控摄像头?
- 您的windows许可证即将过期 win10的解决办法
出现这个错误是因为安装的版本不是正版系统,每隔一段时间需要激活 这次激活也费了一些时间,记录如下希望能对大家有所帮助 (1)首先可以查看自己的许可什么什么时候会过期 windows+R调出命令运行窗口 ...
- v-model指令实现简单的问卷表格
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&q ...
- 2018-2019-2 《网络对抗技术》Exp4 恶意代码分析20165211
目录 实践内容概述 实践目标 实践内容 实验问题回答 实践过程记录 系统运行监控 使用schtacks指令监控系统运行 使用sysmon工具监控系统运行 恶意软件分析 使用Virus Total分析恶 ...
- 20145208 蔡野 《网络对抗》Exp9 web安全基础实践
20145208 蔡野 <网络对抗>Exp9 web安全基础实践 本实践的目标理解常用网络攻击技术的基本原理.Webgoat实践下相关实验. 实验后回答问题 (1)SQL注入攻击原理,如何 ...
- (一)flutter第一天
import 'package:flutter/material.dart'; void main() => runApp(new MyApp()); class MyApp extends S ...