题面

题解

当只有二维时,就是一个二分图匹配的板子题

三维的时候就很好做了,暴力枚举一维的情况,因为\(\min(x,y,z) = \sqrt{5000} < 18\),于是时间复杂度有保证

代码

#include<cstdio>
#include<cstring>
#include<cctype>
#include<algorithm>
#define RG register
#define file(x) freopen(#x".in", "r", stdin);freopen(#x".out", "w", stdout);
#define clear(x, y) memset(x, y, sizeof(x))inline int read()
{int data = 0, w = 1; char ch = getchar();while(ch != '-' && (!isdigit(ch))) ch = getchar();if(ch == '-') w = -1, ch = getchar();while(isdigit(ch)) data = data * 10 + (ch ^ 48), ch = getchar();return data * w;
}const int maxn(5010);
struct edge { int next, to; } e[maxn];
int head[maxn], e_num, a, b, c, Min, pos[4][maxn], vis[maxn], match[maxn], clean[maxn], ans, cnt, T;inline void add_edge(int from, int to) { e[++e_num] = (edge) {head[from], to}; head[from] = e_num; }
bool dfs(int x)
{for(RG int i = head[x]; i; i = e[i].next){int to = e[i].to; if(vis[to]) continue; vis[to] = true;if(!match[to] || dfs(match[to])) return match[to] = x, true;}return false;
}inline void Doit(int x)
{using std::fill; e_num = 0;fill(head + 1, head + b + 1, 0);fill(match + 1, match + c + 1, 0);fill(clean + 1, clean + a + 1, 1);int res = 0;for(RG int i = 0; i < a; i++)if(x & (1 << i)) clean[i + 1] = 0, ++res;for(RG int i = 1; i <= cnt; i++)if(clean[pos[1][i]]) add_edge(pos[2][i], pos[3][i]);for(RG int i = 1; i <= b; i++){fill(vis + 1, vis + c + 1, 0);if(dfs(i)) ++res;}ans = std::min(ans, res);
}int main()
{T = read();while(T--){cnt = 0; ans = 0x3f3f3f3f;a = read(); b = read(); c = read(); Min = std::min(std::min(a, b), c);for(RG int i = 1, x; i <= a; i++)for(RG int j = 1; j <= b; j++)for(RG int k = 1; k <= c; k++)if((x = read())) ++cnt, pos[1][cnt] = i, pos[2][cnt] = j, pos[3][cnt] = k;using std::swap;if(Min == b) swap(a, b), swap(pos[1], pos[2]);if(Min == c) swap(a, c), swap(pos[1], pos[3]);for(RG int i = 0; i < (1 << a); i++) Doit(i);printf("%d\n", ans);}return 0;
}

转载于:https://www.cnblogs.com/cj-xxz/p/10396342.html

【HNOI2013】消毒相关推荐

  1. bzoj3140: [Hnoi2013]消毒

    Description 最近在生物实验室工作的小T遇到了大麻烦. 由于实验室最近升级的缘故,他的分格实验皿是一个长方体,其尺寸为a*b*c,a.b.c 均为正整数.为了实验的方便,它被划分为a*b*c ...

  2. [luogu3231 HNOI2013] 消毒 (二分图最小点覆盖)

    传送门 Description 最近在生物实验室工作的小T遇到了大麻烦. 由于实验室最近升级的缘故,他的分格实验皿是一个长方体,其尺寸为abc,a.b.c 均为正整数.为了实验的方便,它被划分为abc ...

  3. bzoj3140: [Hnoi2013]消毒(二分图)

    题目描述 最近在生物实验室工作的小T遇到了大麻烦. 由于实验室最近升级的缘故,他的分格实验皿是一个长方体,其尺寸为a*b*c,a.b.c 均为正整数.为了实验的方便,它被划分为a*b*c个单位立方体区 ...

  4. [HNOI2013]消毒 (匈牙利最大匹配)

    Description 最近在生物实验室工作的小T遇到了大麻烦. 由于实验室最近升级的缘故,他的分格实验皿是一个长方体,其尺寸为abc,a.b.c 均为正整数.为了实验的方便,它被划分为abc个单位立 ...

  5. [Hnoi2013]消毒

    Description 最近在生物实验室工作的小T遇到了大麻烦. 由于实验室最近升级的缘故,他的分格实验皿是一个长方体,其尺寸为abc,a.b.c 均为正整数.为了实验的方便,它被划分为abc个单位立 ...

  6. [bzoj3140] [Hnoi2013]消毒

    Description 最近在生物实验室工作的小T遇到了大麻烦. 由于实验室最近升级的缘故,他的分格实验皿是一个长方体,其尺寸为abc,a.b.c 均为正整数.为了实验的方便,它被划分为abc个单位立 ...

  7. BZOJ.3140.[HNOI2013]消毒(二分图匹配 匈牙利)

    题目链接 不难想到每次一定是切一片. 如果是平面,很容易想到直接做二分图匹配.对于3维的? 可以发现min(a,b,c)的最大值只有\(\sqrt[3]{n}≈17\),我们暴力枚举这一最小值代表的是 ...

  8. 3140: [Hnoi2013]消毒

    首先要知道一次打掉一个1*x*y的面是最优的.证明太简单所以略. 然后看这道题的二维版本:bzoj1693 [Usaco2007 Demo]Asteroids   http://www.lydsy.c ...

  9. Noip前的大抱佛脚----赛前任务

    赛前任务 tags:任务清单 前言 现在xzy太弱了,而且他最近越来越弱了,天天被爆踩,天天被爆踩 题单不会在作业部落发布,所以可(yi)能(ding)会不及时更新 省选前的练习莫名其妙地成为了Noi ...

  10. # HNOI2012 ~ HNOI2018 题解

    HNOI2012 题解 [HNOI2012]永无乡 Tag:线段树合并.启发式合并 联通块合并问题. 属于\(easy\)题,直接线段树合并 或 启发式合并即可. [HNOI2012]排队 Tag:组 ...

最新文章

  1. 新版中青——青龙羊毛
  2. 042_CSS3字体
  3. autojs微博_js实现微博发布小功能
  4. 关于ajax请求400问题解决
  5. TensorFlow学习笔记01:图
  6. 3.6 Batch Norm 为什么奏效?
  7. [WM C++]从资源文件中加载显示png/jpg图片
  8. Python- 索引 B+数 比如书的目录
  9. ElasticHD Windows环境下安装(转载)
  10. 45. Use member function templates to accept all compatible types.
  11. python函数手册(1)
  12. 如何基于FastReport报表工具,生成报表PDF文档展示医院处方笺的内容
  13. 数字天堂陷入困境_我如何从陷入困境和绝望变成实现我的技术职业梦想
  14. 说唱天王 Eminem 自传《The Way I am》2
  15. Excel删除重复行单不删除单元格
  16. Hyperautomation for the enhancement of automation in industries 论文翻译
  17. 都是做游戏,为嘛国内外出来的产品相差这么大?
  18. (17)-- 网页的foot制作
  19. 虹科小课堂|密度测量,你了解多少?
  20. RSS阅读——在繁杂的社会接受纯粹的信息 RSS介绍与RSS订阅源分享

热门文章

  1. Part8 多态性 8.1运算符重载
  2. Android中attrs.xml文件的使用详解
  3. Android源码下载(ubuntu12.04(amd64))
  4. 初学者应该了解的一些SQL语句及hr 用户解锁相关
  5. vue cli3.0创项目报错‘This may cause things to work incorrectly. Make sure to use the same version for b’
  6. vue --- cdn导入,一些基本操作
  7. JAXB vs XStream
  8. 脚本安装smokeping
  9. yii2中的rules验证规则
  10. [转]TortoiseSVN客户端重新设置用户名和密码