[BZOJ]3140 二分图最大匹配

饥饿游戏搜索算法(HGS)详解:从生物激励到智能优化 饥饿游戏搜索算法(HGS)是一种受动物饥饿驱动觅食行为启发的智能优化算法。该算法通过模拟生物饥饿程度与觅食策略的关系,将个体适应度映射为饥饿感,并据此动态调整搜索行为。HGS的核心机制包括:1) 饥饿权重计算(W1/W2),2) 三种位置更新策略(随机探索、正向/负向协作),3) 自适应平衡参数E。算法通过迭代优化逐步改进解的质量,具有参数自适应、全局搜索能力强等特点,在复杂优化问题中表现出色。相比传统优化方法,HGS更注重个体内部状态对搜索行为的影响,实现了探索与开发的自然平衡。 阅读详情

3140: [Hnoi2013]消毒

Time Limit: 10 Sec  Memory Limit: 128 MB
Submit: 1339  Solved: 588
[ Submit][ Status][ Discuss]

Description

最近在生物实验室工作的小T遇到了大麻烦。 
由于实验室最近升级的缘故,他的分格实验皿是一个长方体,其尺寸为a*b*c,a、b、c 均为正整数。为了实验的方便,它被划分为a*b*c个单位立方体区域,每个单位立方体尺寸
为1*1*1。用(i,j,k)标识一个单位立方体,1 ≤i≤a,1≤j≤b,1≤k≤c。这个实验皿已经很久没有人用了,现在,小T被导师要求将其中一些单位立方体区域进 行消毒操作(每个区域可以被重复消毒)。而由于严格的实验要求,他被要求使用一种特定 的F试剂来进行消毒。 这种F试剂特别奇怪,每次对尺寸为x*y*z的长方体区域(它由x*y*z个单位立方体组 成)进行消毒时,只需要使用min{x,y,z}单位的F试剂。F试剂的价格不菲,这可难倒了小 T。现在请你告诉他,最少要用多少单位的F试剂。(注:min{x,y,z}表示x、y、z中的最小 者。) 

Input

第一行是一个正整数 D ,表示数据组数。 接下来是 D 组数据,每组数据开头是三个数 a,b,c 表示实验皿的尺寸。接下来会出现 a 个 b  行 c 列的用空格隔开的 01 矩阵, 0 表示对应的单位立方体不要求消毒, 1 表示对应的单位立方 体需要消毒;例如,如果第 1 个 01 矩阵的第 2 行第 3 列为 1 ,则表示单位立方体 (1,2,3) 需要被 消毒。 输入保证满足 a*b*c≤5000,T≤3 。

Output

仅包含D行,每行一个整数,表示对应实验皿最少要用多少单位 的F试剂。

Sample Input

1
4 4 4
1 0 1 1
0 0 1 1
0 0 0 0
0 0 0 0
0 0 1 1
1 0 1 1
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
1 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
1 0 0 0

Sample Output

3

HINT

对于区域(1,1,3)-(2,2,4)和(1,1,1)-(4,4,1)消毒,分别花费2个单位和1个单位的F试剂。2017.5.26新加两组数据By Leoly,未重测.

Source

[ Submit][ Status][ Discuss]


HOME Back

    这道题就比较奇特了...

    首先考虑二维的怎么做. 二维的就是然一个x*y的区域, 花费min(x, y). 这个min值怎么消掉? 其实考虑对于染某一个点, 染他这一列只需要1花费, 因为宽度只为1, 所以min值只为1. 由于你反正染这个点花费是1, 染这一点所在的一行也是1, 所以干脆每次就染一行染完. 那么每次染一个区域其实就可以看做染很多条, 每次的花费为1. 那么这个问题就转化成了用最少的行和列覆盖所有的点. 这就是经典的二分图最大匹配. 就是 poj3041.

    那么考虑三维的. 因为a*b*c<=5000, 那么有一列肯定<=17. 把这一列作为高, 那么我们就2^17的枚举哪些层要染, 相当于横着切. 剩下没染的点, 我们只用考虑竖着切和横穿着切(反正三种切的方式). 那么相当于就是二维里切行和切列. 所以总体思路就是三维的转化二维来做的话, 枚举最小的一维即可. 

    听说memset要死的很惨...

#include<stdio.h>
#include<algorithm>
using namespace std;
const int maxn = 5050;
int n, m, A, B, C, num, cnt, res, ans, tim, cas, opt;
int pw[20], h[maxn], match[maxn * 2], vis[maxn * 2];
struct point{ int x, y, z;}p[maxn];
struct edge{ int nxt, v;}e[100050];
inline void add(int u, int v){ e[++num].v = v, e[num].nxt = h[u], h[u] = num;}
int find(int u){
    for(int i = h[u]; i; i = e[i].nxt){
        int v = e[i].v;
        if(vis[v] < tim){
            vis[v] = tim;
            if(!match[v] || find(match[v]))
                return match[v] = u;
        }
    }
    return false;
}
inline void solve(int st){
    n = B, m = C; num = res = 0;
    for(int i = 0; i < A; ++i) if(pw[i] & st) res++;
    if(res >= ans) return;
    for(int i = 1; i <= n; ++i) h[i] = 0;
    for(int i = 5010; i <= 5010 + m; ++i) match[i] = 0;
    for(int i = 1; i <= cnt; ++i)
        if(!(st & pw[p[i].x - 1])) add(p[i].y, p[i].z + 5010);
    for(int i = 1; i <= n; ++i){
        ++tim;
        if(find(i)) res++;
        if(res >= ans) return;
    }
    ans = res;
}
int main(){
    scanf("%d", &cas);
    pw[0] = 1;
    for(int i = 1; i <= 18; ++i) pw[i] = pw[i - 1] << 1;
    while(cas--){
        ans = 1e9, cnt = 0;
        scanf("%d%d%d", &A, &B, &C);
        for(int i = 1; i <= A; ++i)
            for(int j = 1; j <= B; ++j)
                for(int k = 1; k <= C; ++k){
                    scanf("%d", &opt);
                    if(opt) p[++cnt].x = i, p[cnt].y = j, p[cnt].z = k;
                }
        if(B < A){
            swap(A, B);
            for(int i = 1; i <= cnt; ++i) swap(p[i].x, p[i].y);
        }
        if(C < A){
            swap(A, C);
            for(int i = 1; i <= cnt; ++i) swap(p[i].x, p[i].z);
        }
        for(int i = 0; i < pw[A]; ++i) solve(i);
        printf("%d\n", ans);
    }
}


2024阅读AOSP源码的正确打开姿势 在Android系统开发中,阅读AOSP(Android Open Source Project)源码是非常重要的环节。然而,如何构建一个优雅的阅读环境却是一个不容忽视的问题。本文将介绍不同工具和方法下阅读AOSP源码的正确姿势,并对比其优缺点。 阅读详情

相关推荐

STM32+4G模块+MQTT协议:从零构建稳定可靠的物联网通讯链路

本文详细介绍了如何利用STM32、4G模块和MQTT协议构建稳定可靠的物联网通讯链路。通过硬件选型、AT指令配置和MQTT连接实战,帮助开发者实现低功耗、高可靠性的数据传输,特别适合户外和移动场景应用。

weixin_29191081的博客 333

BZOJ 4950 Mission Improbable (二分图最大匹配)

4950: [Wf2017]Mission ImprobableTime Limit: 1 Sec Memory Limit: 1024 MB Description那是春日里一个天气晴朗的好日子,你准备去见见你的老朋友Patrick,也是你之前的犯罪同伙。Patrick在编程竞赛 上豪赌输掉了一大笔钱,所以他需要再干一票。为此他需要你的帮助,虽然你已经金盆洗手了。你刚开始很不情愿, 因为你

w4149 1210

深度解析跨境支付之业务架构

详解跨境支付之业务架构

weixin_47493863的博客 1877

Bzoj 4950

Description 那是春日里一个天气晴朗的好日子,你准备去见见你的老朋友Patrick,也是你之前的犯罪同伙。Patrick在编程竞赛上豪赌输掉了一大笔钱,所以他需要再干一票。为此他需要你的帮助,虽然你已经金盆洗手了。你刚开始很不情愿,因为你一点也不想再回到那条老路上了,但是你觉得听一下他的计划也无伤大雅。在附近的一个仓库里有一批货物包含一些贵重的消费性部件,Patrick企图从中尽可...

weixin_30300523的博客 249

爆改YOLOv8 | PSA注意力机制融合入YOLOv8

yolov8,PSA注意力,即插即用

weixin_43986124的博客 2496

Python入门之机器学习(非常详细)篇幅拉满,一般人看不完!

什么是机器学习?监督学习 supervised learning;非监督学习 unsupervised learning;半监督学习 semi-supervised learning;强化学习 reinforcement learning;监督学习是不断向计算机提供数据(特征),并告诉计算机对应的值(标签),最后通过大量的数据,让计算机自己学会判断和识别。例如Google Photo,你在APP中输入狗,这时就会弹出与狗相关的图片,这背后使用的算法就是监督学习。

xiaolinyui的博客 2万+

[二分图最大匹配必配点] BZOJ 3546 [ONTAK2010]Life of the Party

%%%dyh 首先求出最大匹配,下面考虑左边点的情况。 我们将匹配中的边从右往左连,不在匹配中的边从左往右连。 这个时候一条增广路成为一条连续的路径。 从每个左边未匹配的点还是遍历,如果被一个左边的点被访问到,说明存在一条增广路,也就是不一定在最大匹配中。 所有没有被访问到的点一定在最大匹配中。 #include #include #include #inc

雯舞 999

【HALCON+C#实战】3D点云测量系统开发全攻略:从源码解析到工业应用

本文详细介绍了基于HALCON和C#开发3D点云测量系统的全流程,从环境搭建、核心算法实现到工业应用优化。通过源码解析和实战技巧,帮助开发者解决点云数据处理、几何测量及系统集成中的常见问题,提升工业检测的精度与效率。

brown的博客 209

【BZOJ】变换序列-二分图最大匹配

传送门:BZOJ1562-变换序列 由于题目是图片形式,就不贴了。 题解 我们把每个数与可以变换的两个标号之间连一条无向边,跑一下二分图最大匹配就好啦。 代码 #include&amp;amp;lt;bits/stdc++.h&amp;amp;gt; #define o(x,y) g[x].push_back(y); using namespace std; const int N=1e4+10; in...

远行客 301

OTA 升级失败/回滚策略设计:打造安全可靠的双分区/断点续传/签名校验方案

双分区机制(A/B Partitioning)是OTA升级的“保险箱”。简单来说,设备存储分为两个分区:A分区(当前运行)和B分区(备用)。升级时,新固件写入B分区,A分区保持不变。如果升级成功,系统切换到B分区运行;如果失败,设备直接回滚到A分区,完全不受影响。这就像玩游戏存档:你打Boss前存了个档,万一挂了还能读档重来。双分区就是设备的“读档”机制,避免了变砖的尴尬。以Android设备为例,Google从Android 7.0开始强制引入A/B分区机制(Seamless Updates)。

大模型大数据攻城狮的专栏 1231

XCP实战系列介绍07-使用ASAP2 Editor生成A2l文件详解

介绍通过ASAP2 Editor工具生成A2l文件步骤详解

initiallizer的博客 7296

【BZOJ】1854: [Scoi2010]游戏-二分图最大匹配

传送门:bzoj1854 题解 二分图最大匹配裸题。 代码 #include&lt;bits/stdc++.h&gt; #define gc getchar() #define si isdigit(c) #define RI register using namespace std; const int N=1e6+10; int head[N&lt;&lt;1],t...

远行客 275

【Halcon 】Halcon 实战:如何为 XLD 模板添加极性信息以提升匹配精度?

本文介绍了Halcon中为XLD轮廓模板添加极性信息的实用技巧。通过先以"ignore_local_polarity"模式创建模板,首次匹配获得位置后,使用set_shape_model_metric运算符结合真实图像为模板注入极性信息(边缘明暗方向)。这种方法弥补了XLD模板初始不支持极性的缺陷,可显著提升后续匹配的精度和抗干扰能力。实验显示,添加极性信息后的模板匹配效果明显优于无极性的匹配结果。该技术特别适用于基于手动绘制或处理后的XLD轮廓创建模板的场景。

songhuangong123的博客 750

BZOJ 3140 消毒 (二进制枚举降维 二分图最大匹配)

3140: [Hnoi2013]消毒Time Limit: 10 Sec Memory Limit: 128 MB Description最近在生物实验室工作的小T遇到了大麻烦。 由于实验室最近升级的缘故,他的分格实验皿是一个长方体,其尺寸为a * b * c,a、b、c 均为正整数。为了实验的方便,它被划分为a * b * c个单位立方体区域,每个单位立方体尺寸为1 * 1 * 1。用(i

w4149 373

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

[bzoj3140][Hnoi2013]消毒——枚举+最大二分图匹配

题目大意: 一个长方体中有一些格子需要消毒,消毒一个a∗b∗ca∗b∗ca*b*c的格子需要的费用为min(a,b,c)min(a,b,c)\min(a,b,c)问将所有的格子都消毒的最下费用为多少。 思路: 先来考虑二维下怎么消毒:先确定计算费用的那一维度,然后剩下的一维就拓展到低,所以最后的形式必定是x∗bx∗bx*b或者a∗xa∗xa*x。对于x∗bx∗bx*b或者a∗xa∗xa*x这...

ylsoi的博客 224

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

[省选前题目整理][BZOJ 3140][HNOI 2013]消毒(二分图最大匹配)

题目链接http://www.lydsy.com/JudgeOnline/problem.php?id=3140思路如果这个题是二维的,也就是在一个二维矩阵中,每次操作可以任选一条行或列杀菌,求最少操作次数,这就是一个裸的最小覆盖集问题,把存在细菌的坐标(x,y)(x,y),从行号xx向列号yy连边,求出的二分图最大匹配即为答案。但是题目是三维的,设原立方体大小为(a,b,c)(a,b,c),且a≤

某沙茶的OI代码库 1622

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

【BZOJ3140】消毒(二分图匹配)

【BZOJ3140】消毒(二分图匹配) 题面 Description 最近在生物实验室工作的小T遇到了大麻烦。 由于实验室最近升级的缘故,他的分格实验皿是一个长方体,其尺寸为abc,a、b、c 均为正整数。为了实验的方便,它被划分为abc个单位立方体区域,每个单位立方体尺寸 为111。用(i,j,k)标识一个单位立方体,1 ≤i≤a,1≤j≤b,1≤k≤c。这个实验皿已经很久没有人用了,现在,小T...

weixin_30319153的博客 155

bzoj3140: [Hnoi2013]消毒

传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=3140 思路:首先我们观察题目“只需要使用min{x,y,z}单位的F试剂” 那么我们如果选择一位长度为a,那其他两维直接取到最大即可 那么题目就相当于问最少切多少个面才能覆盖所有点 二维的很简单,直接二分图匹配即可(不会的见poj3041) http://poj.org/probl

thy的专栏 2052

BZOJ3140 消毒

题意 小AA和小YY得到了《喜羊羊和灰太狼》的电影票,都很想去观看,但是电影票只有一张,于是他们用智力游戏决定胜负,赢得游戏的人可以获得电影票。 在 N∗MN*MN∗M 的迷宫中有一个棋子,小AA首先任意选择棋子放置的位置。然后,小YY 和小AA轮流将棋子移动到相邻的格子里。游戏的规则规定,在一次游戏中,同一个格子不能进入两次,且不能将棋子移动到某些格子中去。当玩家无法继续移动棋子时,游戏结束,最...

sz_165394732的博客 250

bzoj3140: [Hnoi2013]消毒 二分图匹配

题目链接:戳这里 3140: [Hnoi2013]消毒 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 1365  Solved: 598 [Submit][Status][Discuss] Description 最近在生物实验室工作的小T遇到了大麻烦。  由于实验室最近升级的缘故,他的分格实验皿是一个长方体,其尺寸为a

Twin Automata的博客 388

【BZOJ 3140】 [Hnoi2013]消毒

状态压缩+二分图~ 详细题解+时间优化方法~

Regina8023 1497

BZOJ3140 HNOI2013消毒

传送门 这道题有毒 我在做的时候就在想有没有一个什么“三分图”的匹配?(脑洞打开) 发现想不出来了,有观察到a,b,c中最小的最大只有17(a∗b∗c==5000)=>(min(a,b,c)<=50001/3)(a*b*c == 5000) =>(min(a, b, c) <={5000}^{1/3})就又写起了搜索……(因为每一次肯定可以通过选取1*x*y的一块矩形,最终得到最优解) 最

geng4512的专栏 1075

[BZOJ3140][网络流]HNOI2013:消毒

BZOJ3140 二维的情况:把所有x和y转成二分图,跑最大匹配即可 推广到三维:因为a∗b∗c≤5000a*b*c\leq5000a∗b∗c≤5000,所以有一维必定小于17,则2172^17217枚举这一维的状态,剩下的二维直接做就好了 注意memset会T Code: #include<bits/stdc++.h> using namespace std; inline int ...

romiqi 150

BZOJ 3140 [HNOI2013] 消毒 二分图匹配

题目描述 Description 最近在生物实验室工作的小T遇到了大麻烦。 由于实验室最近升级的缘故,他的分格实验皿是一个长方体,其尺寸为 a∗b∗ca∗b∗ca*b*c。a,b,ca,b,ca,b,c均为正整数。为了实验的方便,它被划分为a∗b∗ca∗b∗ca*b*c个单位立方体区域,每个单位立方体尺寸为1∗1∗11∗1∗11*1*1。用(i,j,k)(i,j,k)(i,j,k)标识一个单位...

Chlience的博客 369

二分图专题

T1 DTOJ 2346. 小凸玩矩阵(matrix) 题解 显然二分答案,判断ans是否≤\le≤x,即>ans的点不能超过k-1个。对于矩阵行列匹配的题考虑把行和列看作点,每个数看作边,然后为什么我想的就是直接费用流呢(最近怎么每道题都想到最麻烦的做法啊)。直接把≤\le≤ans的点连上,看最大匹配是否大于n-k个就好啦,因为是完全图剩下的一定能匹配完。 T2 洛谷 4589 [TJOI...

sz_165394732的博客 257

【一堆二分图】

HDU 1054:无向图最小顶点覆盖,maxmatch/2

willinglive 937
上一篇: [BZOJ]4950 二分图 + 最大匹配
下一篇: [BZOJ]4709 柠檬 DP单调性优化 + 单调栈
MaxMercer
博客等级 码龄10年 55粉丝 261原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值