博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
bzoj千题计划295:bzoj3140: [Hnoi2013]消毒
阅读量:5041 次
发布时间:2019-06-12

本文共 1913 字,大约阅读时间需要 6 分钟。

 

如果只有两维,那就是二分图最小点覆盖

现在是三维,但是a*b*c<=5000,说明最小的那一维不会超过17

将最小的那一维作为正方形的高

然后枚举要消哪些层,剩下的层看成一层 做最小点覆盖

注意卡常

 

#include
#include
#include
using namespace std;#define N 5001struct node{ int i,j,k;}e[N];bool have[18];int front[N],to[N],nxt[N],tot;7int match[N];int tim,vis[N];void read(int &x){ x=0; char c=getchar(); while(!isdigit(c)) c=getchar(); while(isdigit(c)) { x=x*10+c-'0'; c=getchar(); }}bool go(int u){ int v; for(int i=front[u];i;i=nxt[i]) { v=to[i]; if(vis[v]!=tim) { vis[v]=tim; if(!match[v] || go(match[v])) { match[v]=u; return true; } } } return false;}int count(int x){ int sum=0; while(x) sum+=x&1,x>>=1; return sum;}void add(int u,int v){ to[++tot]=v; nxt[tot]=front[u]; front[u]=tot;}int main(){ int T,a,b,c; int ty,x; int S,cnt; bool tag; int ans,now; read(T); while(T--) { read(a); read(b); read(c); if(a<=b && a<=c) ty=1; else if(b<=a && b<=c) ty=2; else ty=3; memset(have,false,sizeof(have)); cnt=0; for(int i=1;i<=a;++i) for(int j=1;j<=b;++j) for(int k=1;k<=c;++k) { read(x); if(!x) continue; cnt++; if(ty==1) e[cnt].i=i,e[cnt].j=j,e[cnt].k=k; if(ty==2) e[cnt].i=j,e[cnt].j=i,e[cnt].k=k; if(ty==3) e[cnt].i=k,e[cnt].j=i,e[cnt].k=j; have[e[cnt].i]=true; } if(ty==2) swap(a,b); else if(ty==3) swap(b,c),swap(a,b); ans=a; S=1<
=ans) break; } ans=ans<=now ? ans : now; } printf("%d\n",ans); }}

 

转载于:https://www.cnblogs.com/TheRoadToTheGold/p/8610811.html

你可能感兴趣的文章
web.xml中listener、 filter、servlet 加载顺序及其详解
查看>>
前端chrome浏览器调试总结
查看>>
获取手机验证码修改
查看>>
数据库连接
查看>>
python中数据的变量和字符串的常用使用方法
查看>>
等价类划分进阶篇
查看>>
delphi.指针.PChar
查看>>
Objective - C基础: 第四天 - 10.SEL类型的基本认识
查看>>
java 字符串转json,json转对象等等...
查看>>
极客前端部分题目收集【索引】
查看>>
第四天 selenium的安装及使用
查看>>
关于js的设计模式(简单工厂模式,构造函数模式,原型模式,混合模式,动态模式)...
查看>>
KMPnext数组循环节理解 HDU1358
查看>>
android调试debug快捷键
查看>>
【读书笔记】《HTTP权威指南》:Web Hosting
查看>>
Inoodb 存储引擎
查看>>
数据结构之查找算法总结笔记
查看>>
Linux内核OOM机制的详细分析
查看>>
Android TextView加上阴影效果
查看>>
Requests库的基本使用
查看>>