[HNOI2013] 消毒 - 二分图匹配
容易发现 \(a,b,c\) 中至少有一个 \(\leq 17\)
不妨将其调剂为 \(a\),那么我们可以暴力枚举哪些 \(x\) 片片要被直接削掉,剩下的拍扁成二维情况
二维时,如果有一个格子是 \(1\),就把它的行列对应点连边,跑二分图匹配即可
好像有点卡常啊,我太难了
#include <bits/stdc++.h>
using namespace std;
#define N 255
namespace phi {
int n,m,p,cx[N],cy[N],vis[N];
std::vector<int> e[N];
int dfs(int u,int Time) {
for(int i=0;i<(int)e[u].size();++i) {
int v=e[u][i];
if(vis[v]^Time) {
vis[v]=Time;
if(!cy[v]||dfs(cy[v],Time)) {
cx[u]=v; cy[v]=u;
return 1;
}
}
}
return 0;
}
void init() {
m=p=0;
memset(cx,0,sizeof cx);
memset(cy,0,sizeof cy);
memset(vis,0,sizeof vis);
for(int i=1;i<=n;i++) e[i].clear();
}
void make(int u,int v) {
e[u].push_back(v);
}
int solve(){
int ans=0;
for(int i=1;i<=n;++i) ans+=dfs(i,i);
return ans;
}
}
int T,a,b,c,ta,tb,tc,ans=1e+9;
bool g[18][255][5005],h[255][5005];
int main() {
scanf("%d",&T);
while(T--){
memset(g,0,sizeof g);
memset(h,0,sizeof h);
ans=1e+9;
scanf("%d%d%d",&a,&b,&c);
int A=a,B=b,C=c;
ta=1; tb=2; tc=3;
if(a>b) swap(a,b), swap(ta,tb);
if(a>c) swap(a,c), swap(ta,tc);
if(b>c) swap(b,c), swap(tb,tc);
for(int i=1;i<=A;i++) {
for(int j=1;j<=B;j++) {
for(int k=1;k<=C;k++) {
int t;
cin>>t;
int x=i,y=j,z=k;
if(A>B) swap(x,y);
if(A>C) swap(x,z);
if(B>C) swap(y,z);
g[x][y][z]=t;
}
}
}
for(int i=0;i<1<<A;i++) {
if(__builtin_popcount(i)>=ans) continue;
int u[20]={};
for(int p=1;p<=B;p++) {
for(int q=1;q<=C;q++) {
h[p][q]=0;
}
}
for(int j=1;j<=A;j++) {
u[j]=(i>>(j-1))&1;
if(u[j]==0) {
for(int p=1;p<=B;p++) {
for(int q=1;q<=C;q++) {
h[p][q]|=g[j][p][q];
}
}
}
}
phi::n=B;
phi::init();
for(int p=1;p<=B;p++) {
for(int q=1;q<=C;q++) {
if(h[p][q]) phi::make(p,q);
}
}
int tmp=phi::solve()+__builtin_popcount(i);
ans=min(ans,tmp);
}
printf("%d\n",ans);
}
}
[HNOI2013] 消毒 - 二分图匹配的更多相关文章
- BZOJ.3140.[HNOI2013]消毒(二分图匹配 匈牙利)
题目链接 不难想到每次一定是切一片. 如果是平面,很容易想到直接做二分图匹配.对于3维的? 可以发现min(a,b,c)的最大值只有\(\sqrt[3]{n}≈17\),我们暴力枚举这一最小值代表的是 ...
- [BZOJ3140][HNOI2013]消毒(二分图最小点覆盖)
3140: [Hnoi2013]消毒 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1621 Solved: 676[Submit][Status] ...
- [luogu3231 HNOI2013] 消毒 (二分图最小点覆盖)
传送门 Description 最近在生物实验室工作的小T遇到了大麻烦. 由于实验室最近升级的缘故,他的分格实验皿是一个长方体,其尺寸为abc,a.b.c 均为正整数.为了实验的方便,它被划分为abc ...
- 【BZOJ3140】消毒(二分图匹配)
[BZOJ3140]消毒(二分图匹配) 题面 Description 最近在生物实验室工作的小T遇到了大麻烦. 由于实验室最近升级的缘故,他的分格实验皿是一个长方体,其尺寸为abc,a.b.c 均为正 ...
- P3231 [HNOI2013]消毒
P3231 [HNOI2013]消毒 二维覆盖我们已经很熟悉了 扩展到三维,枚举其中较小的一维,这里定义为$a$ 以$a$为关键字状压,$1$表示该面全选 剩下的面和二维覆盖一样二分图匹配 如果还没接 ...
- 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]消毒
3140: [Hnoi2013]消毒 Description 最近在生物实验室工作的小T遇到了大麻烦. 由于实验室最近升级的缘故,他的分格实验皿是一个长方体,其尺寸为a*b*c,a.b.c 均为正整数 ...
- UVA 12549 - 二分图匹配
题意:给定一个Y行X列的网格,网格种有重要位置和障碍物.要求用最少的机器人看守所有重要的位置,每个机器人放在一个格子里,面朝上下左右四个方向之一发出激光直到射到障碍物为止,沿途都是看守范围.机器人不会 ...
随机推荐
- redis_入门
Redis_day01 1. NoSql 1.1 NoSql是什么 NoSQL(不仅仅是SQL not only SQL),泛指非关系型的数据库.随着互联网web2.0网站的兴起,传统的关系数据库在处 ...
- gRPC用法
官方文档 前置技能 protobuf 什么是 gRPC? A high performance, open-source universal RPC framework RPC : Remote Pr ...
- 高精度模板 支持各种运算 c++
绪言 自从有了高精度模板,妈妈再也不用怕我不会打高精度了! 代码 代码长度与日俱增啊~~~ #include<iostream> #include<cstring> #incl ...
- c 指针改变数字
之前已经有了: gcc -c day4.c -Wall gcc -o day4.exe day4.o 所以才会有以下结果
- UESTC 1324 卿学姐与公主 分块板子
#include<iostream> #include<cmath> using namespace std; ; //表示当前数在哪一块里面 int belong[maxn] ...
- PHP0020:PHP 单文件上传 多文件上传
- es5和es6创建新数组的方法
//es5 let array = Array(5) let array = [] //es6 1.let array = Array.of(1,2,3,4,5) 2.let array = Arra ...
- [MongoDB]MongoDB的ObjectId组成
一.ObjectId的组成首先通过终端命令行,向mongodb的collection中插入一条不带“_id”的记录.然后,通过查询刚插入的数据,发现自动生成了一个objectId“5e4fa350b6 ...
- expect: spawn id exp6 not open while executing "expect eof"
1.expect是基于tcl演变而来的,所以很多语法和tcl类似 基本的语法如下所示:1.1 首行加上/usr/bin/expect1.2 spawn: 后面加上需要执行的shell命令,比如说spa ...
- 如何安装selenium框架
半年前因不满自己工作内容,便到处寻求资料,偶遇分享一套全套教程.开始学习python,后接触selenium有关内容. 前期因为配置环境花了些许时间,后来解决了,回想是如此简单 安装步骤 1.下载py ...