YBTOJ洛谷P3231:消毒(二分图匹配)

文章目录

  • 题目描述
  • 解析
  • 代码

题目描述

最近在生物实验室工作的小 T 遇到了大麻烦。 由于实验室最近升级的缘故,他的分格实验皿是一个长方体,其尺寸为 a∗b∗ca*b*cabc。为了实验的方便,它被划分为 a∗b∗ca*b*cabc 个单位立方体区域,每个单位立方体尺寸为 1∗1∗11*1*1111,并用 (i,j,k)(i,j,k)(i,j,k) 标识一个单位立方体。这个实验皿已经很久没有人用了。现在,小 T 被导师要求将其中一些单位立方体区域进行消毒操作(每个区域可以被重复消毒)。

而由于严格的实验要求,他被要求使用一种特定的 F 试剂来进行消毒。 这种 F 试剂特别奇怪,每次对尺寸为 x∗y∗zx*y*zxyz 的长方体区域(它由 x∗y∗zx*y*zxyz 个单位立方体组成)进行消毒时,只需要使用 min(x,y,z)min(x,y,z)min(x,y,z) 单位的 F 试剂。F 试剂的价格不菲,这可难倒了小 T。

现在请你告诉他,最少要用多少单位的 F 试剂。

解析

非暴力,不合作

首先可以有一个结论:**每次使min(x,y,z)=1min(x,y,z)=1min(x,y,z)=1,一定是不劣的
所以我们就每次一面一面的涂
看一个《弱化版》的题目

在一N∗NN*NNN个 的矩阵中,有 KKK个格子中有杂物,现在你有一种能力,一次可以消除一行或一列格子中的杂物,问你至少需要几次可以将这些杂物全部消完。

这题应该是二分图的入门题了,把每个点的x坐标与y坐标相连,跑二分图最大匹配即可
不难发现,消毒这题应该就是消除杂物的升级版,从二维变成了三维
然鹅很快我们就发现并不能推广到k维。。。
当然如果您能发明三分图匹配本题就和喝水一样
那么我们怎么办呢?
然后就点开了题解
还是暴力的思想了
考虑到数据范围:
a∗b∗c<=5000a*b*c<=5000abc<=5000

那么a、b、c中的最小值应该不超过17
所以我们考虑暴力枚举最小的一维的选取状态,然后每次跑一遍匈牙利取答案最小值即可

另外本题还有一个很巧妙的实现技巧
先把坐标存到三个一维数组里
把最小的一维swap到a的位置同时把对应的那一位的数组swap到第一位
代码实现就变得很简单了

代码

#include<bits/stdc++.h>
using namespace std;
const int N=5020;
#define ll long long
ll read(){ll x=0,f=1;char c=getchar();while(!isdigit(c)){if(c=='-')f=-1;c=getchar();};while(isdigit(c)){x=x*10+c-'0';c=getchar();};return x*f;
}
int n,m,l;
struct node{int from,to,nxt;
}p[N];
int fi[N],cnt=-1;
void addline(int x,int y){p[++cnt]=(node){x,y,fi[x]};fi[x]=cnt;
}
int vis[N],mat[N];
bool dfs(int x,int tim){if(vis[x]==tim) return false;vis[x]=tim;for(int i=fi[x];~i;i=p[i].nxt){int to=p[i].to;if(!mat[to]||dfs(mat[to],tim)){mat[to]=x;return true;}}return false;
}
int a,b,c;
int hungary(){int res=0;memset(vis,0,sizeof(vis));memset(mat,0,sizeof(mat));for(int i=1;i<=b;i++){if(dfs(i,i)){res++;//printf("  ok:%d\n",i);}}return res;
}int q[4][N],num;
bool ok[35];
int ans;
int calc(){memset(fi,-1,sizeof(fi));cnt=-1;for(int i=1;i<=num;i++){if(ok[q[1][i]]) continue;int x=q[2][i],y=q[3][i];addline(x,y+b);addline(y+b,x);//	printf("x=%d y=%d\n",x,y);}return hungary();
}
void find(int k,int val){if(k>a){//printf("ok");//printf("-------------val=%d\n",val);//for(int i=1;i<=a;i++) printf("%d ",ok[i]);//printf("\n");ans=min(ans,calc()+val);//printf("---ans=%d\n\n",ans);return;}find(k+1,val);ok[k]=1;find(k+1,val+1);ok[k]=0;
}
int main(){int T=read();while(T--){a=read();b=read();c=read();num=0;ans=5000;int mn=min(a,min(b,c));for(int i=1;i<=a;i++){for(int j=1;j<=b;j++){for(int k=1;k<=c;k++){int x=read();if(!x) continue;q[1][++num]=i;q[2][num]=j;q[3][num]=k;}}}if(mn==b){swap(a,b);swap(q[1],q[2]);}else if(mn==c){swap(a,c);swap(q[1],q[3]);}find(1,0);printf("%d\n",ans);}return 0;
}
/**/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/318068.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CF388D-Fox and Perfect Sets【dp,线性基】

正题 题目链接:https://www.luogu.com.cn/problem/CF388D 题目大意 给出kkk&#xff0c;求有多少个集合SSS满足S⊆[1,k]S\sube [1,k]S⊆[1,k]且 a∈S,b∈S⇒axorb∈Sa\in S,b\in S\Rightarrow a\ xor\ b\in Sa∈S,b∈S⇒a xor b∈S 1≤k≤1091\leq k\leq 10^91≤k≤109 解题思…

503. 借教室

503. 借教室 题意&#xff1a; 在大学期间&#xff0c;经常需要租借教室。 大到院系举办活动&#xff0c;小到学习小组自习讨论&#xff0c;都需要向学校申请借教室。 教室的大小功能不同&#xff0c;借教室人的身份不同&#xff0c;借教室的手续也不一样。 面对海量租借教…

.net core+Spring Cloud学习之路 一

文章开头唠叨两句。2019年了&#xff0c;而自己参加工作也两年有余了&#xff0c;用一个词来概括这两年多的生活&#xff0c;就是&#xff1a;“碌碌无为”。也不能说一点收获都没有&#xff0c;但是很少。2019来了&#xff0c;我立志要打破现状&#xff0c;改变自己&#xff0…

CF1153F-Serval and Bonus Problem【dp,数学期望】

正题 题目链接:https://www.luogu.com.cn/problem/CF1153F 题目大意 在有nnn个区间的左右端点在[0,l)[0,l)[0,l)范围内随机&#xff0c;求被至少kkk个区间覆盖的期望长度。 1≤n,k≤2000,1≤l≤1091\leq n,k\leq 2000,1\leq l\leq 10^91≤n,k≤2000,1≤l≤109 解题思路 长度…

网络流优化:-1优化与当前弧优化

所谓网络流优化&#xff0c;就是对网络流算法进行优化 &#xff08;逃&#xff09; -1优化 大概就是如果在一次bfs搜出的图中发现当前这个点啥都增广不出来&#xff0c;就暂时把这个点扣掉 当前弧优化 在一次bfs搜出的图中&#xff0c;如果某条边已经搜过&#xff0c;就不必…

P3128 [USACO15DEC]Max Flow P

P3128 [USACO15DEC]Max Flow P 树上差分之点差分模板题 题目描述&#xff1a; FJ给他的牛棚的N(2≤N≤50,000)个隔间之间安装了N-1根管道&#xff0c;隔间编号从1到N。所有隔间都被管道连通了。 FJ有K(1≤K≤100,000)条运输牛奶的路线&#xff0c;第i条路线从隔间si运输到隔…

插头DP/轮廓线DP

题解 P5056 【【模板】插头dp】- GNAQ (\(\uparrow\) 学习资料&#xff0c;大部分贺的&#xff0c;有一些些的改动与自己的补充) 什么是插头 DP 插头 DP 是一类用状压 DP 来处理连通性问题的 DP 方法。 常见的类型&#xff1a;棋盘插头 DP、连通性问题(回路问题&#xff0c;路径…

周末狂欢赛4(1-02E. JM的西伯利亚特快专递,寿司晚宴,荷马史诗)

文章目录T1&#xff1a;1-02E. JM的西伯利亚特快专递题目题解codeT2&#xff1a;寿司晚宴题目题解codeT3&#xff1a;荷马史诗题目题解codeT1&#xff1a;1-02E. JM的西伯利亚特快专递 题目 今天JM收到了一份来自西伯利亚的特快专递&#xff0c;里面装了一个字符串 s &#x…

.NET Core容器化开发系列(一)——Docker里面跑个.NET Core

前言博客园中已经有很多如何在Docker里面运行ASP.NET Core的介绍了。本篇主要介绍一些细节&#xff0c;帮助初学的朋友更加深入地理解如何在Docker中运行ASP.NET Core。安装DockerDocker现支持在主流Linux、Windows和macOS上安装&#xff0c;官方的安装文档请参考docker docs。…

YBTOJ:卖猪问题(网络流)

文章目录题目描述数据范围解析代码题目描述 尼克在一家养猪场工作&#xff0c;这家养猪场共有MMM间锁起来的猪舍&#xff0c;由于猪舍的钥匙都给了客户&#xff0c;所以尼克没有办法打开这些猪舍。有NNN个客户从早上开始一个接一个来购买生猪&#xff0c;他们到达后首先用手中…

P4370-[Code+#4]组合数问题2【数学,堆】

正题 题目链接:https://www.luogu.com.cn/problem/P4370 题目大意 求满足m≤n≤am\leq n\leq am≤n≤a的情况下&#xff0c;前kkk大的(nm)\binom{n}{m}(mn​)的和。 1≤n≤106,1≤k≤1051\leq n\leq 10^6,1\leq k\leq 10^51≤n≤106,1≤k≤105 解题思路 首先想到的是(nm)>…

【做题记录】[SCOI2009]围豆豆

[SCOI2009]围豆豆 \(n\times m(n,m\le 10)\) 的网格中有 \(d\) 个球 \((d\le 9)\)&#xff0c;要求在网格中选定一个起点开始做一个欧拉回路&#xff0c;路径的价值为路径完全包住的球的价值之和减去路径长度&#xff0c;求所有路径中的价值最大值。 有价值与步数的两个限制&am…

Codeforces Round #695(Div. 2)

Codeforces Round #695 (Div. 2) 1467A Wizard of Orz 1467B Hills And Valleys 1467C Three Bags 1467D Sum of Paths 1467E Distinctive Roots in a Tree 1468A LaIS

YBTOJ危桥通行洛谷P3163:危桥通行(网络流)

文章目录题目描述解析代码题目描述 Alice 和 Bob 居住在一个由 NN 座岛屿组成的国家&#xff0c;岛屿被编号为 00 到 N-1N−1。某些岛屿之间有桥相连&#xff0c;桥上的道路是双向的&#xff0c;但一次只能供一人通行。其中一些桥由于年久失修成为危桥&#xff0c;最多只能通行…

中小研发团队架构实践之生产环境诊断工具WinDbg

生产环境偶尔会出现一些异常问题&#xff0c;WinDbg或GDB是解决此类问题的利器。调试工具WinDbg如同医生的听诊器&#xff0c;是系统生病时做问题诊断的逆向分析工具&#xff0c;Dump文件类似于飞机的黑匣子&#xff0c;记录着生产环境程序运行的状态。本文主要介绍了调试工具W…

多项式的基础操作(逆元/除法/取模/对数ln/开根sqrt/指数exp/快速幂)带模板+luogu全套例题

文章目录多项式的逆元理论推导模板例题&#xff1a;[luogu P4238]【模板】多项式乘法逆题目code多项式的除法/取模理论推导多项式牛顿迭代法模板例题&#xff1a;[luoguP4512]【模板】多项式除法题目code多项式对数ln理论推导模板例题题目code多项式开根sqrt理论推导模板例题题…

P1232-[NOI2013]树的计数【思维】

正题 题目链接:https://www.luogu.com.cn/problem/P1232 题目大意 给出nnn个点的树的dfsdfsdfs序和bfsbfsbfs序&#xff0c;求所有合法的树的平均深度。 1≤n≤21051\leq n\leq 2\times 10^51≤n≤2105 解题思路 bfsbfsbfs应该是最好开始考虑的&#xff0c;因为bfsbfsbfs序的…

Wizard of Orz CodeForces - 1467A

Wizard of Orz CodeForces - 1467A 题意&#xff1a; 有个长度为n初始状态下各元素均为0的数组&#xff0c;没过一秒数组中所有元素都会1&#xff0c;如果是9则会变成0&#xff0c;即0-9不断循环。现在你能够在开始后的任意时间点选取任意一个位置&#xff0c;改位置上的数字…

从软件工程的角度解读任正非的新年公开信

昨天被任正非的那封《全面提升软件工程能力与实践&#xff0c;打造可信的高质量产品》的公开信刷屏了&#xff0c;作为一个软件工程专业科班出身的软件开发从业者&#xff0c;自然是引起了我&#xff08;宝玉xp&#xff09;的好奇&#xff0c;仔细阅读之下确实让我大吃一惊&…

YBTOJ:矛盾指数(网络流-最大权闭合图)

文章目录题目描述解析代码网络流要大胆建图 题目描述 公司内部共nnn个员工&#xff0c;员工之间可能有矛盾。若员工uuu和员工vvv有矛盾&#xff0c;用边(u,v)(u,v)(u,v)表示&#xff0c;共mmm个矛盾。 现在公司决定裁员&#xff0c;使得被裁人员间的矛盾指数最高。矛盾指数定…