[BZOJ3140]消毒(二分图匹配) 题面 Description 最近在生物实验室工作的小T遇到了大麻烦. 由于实验室最近升级的缘故,他的分格实验皿是一个长方体,其尺寸为abc,a.b.c 均为正整数.为了实验的方便,它被划分为abc个单位立方体区域,每个单位立方体尺寸 为111.用(i,j,k)标识一个单位立方体,1 ≤i≤a,1≤j≤b,1≤k≤c.这个实验皿已经很久没有人用了,现在,小T被导师要求将其中一些单位立方体区域进 行消毒操作(每个区域可以被重复消毒).而由于严格的实验要求,他…
A 文本编辑器 无旋treap真好看 B 木棒游戏 暴力神仙题 C 数据生成器 树的直径两端点为Y, Z D 智破连环阵 搜索+二分图匹配优化 第一次写欸 列一下 void dfs (int y,int z)//划分到第几个点 划分了多少段 { 最优化剪枝 边界处理 注意要另存一波匹配 for (int i=y;i<=m;i++)//这一段划在哪里 { 加入对于这一段可行的边 如果有匹配 那么向下dfs 还原边 } }…
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1191 就是二分图匹配的裸题: 注意题目要求是第一次匹配失败就退出!没仔细看题差点丢失1A. 代码如下: #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; ; int n,m,hd[maxn],ct,pre[maxn…
题目大意 一个a * b * c(a * b * c <= 5000)大小的长方体中有一些点需要被覆盖,每次可以选择任意大小的长方体,覆盖其中的点,产生的代价为这个长方体长宽高中最小的那个的长度,求最小代价. 二维情形 对二维的情形这就是经典的最小割问题了,可以建立二分图用二分图最大匹配算法解决.具体建图方法是将行和列分为两个集合,如果一个点需要被覆盖,就将它所在的行和列连接起来.这种解法的正确性是显然的:由最大流-最小割定理,最大流就等于最小割,而将行和列连起来后,为保证源与汇分开必须将源到行…
分析 假如实验皿是二维的,那么这道题便是一个二分图最小点覆盖问题,可以转化为二分图最大匹配问题,使用匈牙利算法解决. 考虑如何扩展到三维,首先我们发现一次操作的代价为\(min(x,y,z)\).不难想到(\(?\)),每次操作的\(x,y,z\)中有一项为\(1\),另外两项为相应的最大值,即每次操作这个长方体的一个面(一"片")时可以使答案最优. 题目中有一个限制条件为\(a \times b \times c \leq 5000\),可以发现\(min(a,b,c) \leq 1…
题目大意 给定两个n阶方阵,方阵B的行i能匹配方阵A的行j当且仅当在第一个方阵中用行向量i替换行向量j后,第一个方阵满秩,显然这是个二分图匹配问题,问是否存在完美匹配,如果存在,还要输出字典序最小的方案. 暴力建图 首先我们考虑建立二分图的问题.我们需要对每对(i, j)判断其是否能连边,也就是说需要判断一个方阵是否满秩.我们可以使用高斯消元来计算矩阵的秩.高斯消元将方阵化成上三角之后,方阵满秩当且仅当其主对角线元素之积非零.一次高斯消元时间复杂度为O(n^3),而需要做n^2次高斯消元,故建图…
题目链接 不难想到每次一定是切一片. 如果是平面,很容易想到直接做二分图匹配.对于3维的? 可以发现min(a,b,c)的最大值只有\(\sqrt[3]{n}≈17\),我们暴力枚举这一最小值代表的是否选,对于剩下的两维二分图匹配 能用匈牙利用什么网络流啊..那么麻烦. 在匈牙利求解的过程中记得剪枝! 因为实际点数应该远不如ABC多,所以不要用memset,直接枚举. woc卡着时过去 那些2000ms怎么过的??网上找不到快点的懒得找. zz的我考场写的每次DFS完重建边+ISAP,成功都T掉…
容易发现 \(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…
题意:给定一个Y行X列的网格,网格种有重要位置和障碍物.要求用最少的机器人看守所有重要的位置,每个机器人放在一个格子里,面朝上下左右四个方向之一发出激光直到射到障碍物为止,沿途都是看守范围.机器人不会阻挡射线. “#”表示障碍物,“*”表示重要的位置,箭头表示最终机器人匹配的位置,求出机器人能够匹配出的最少位置个数. 分析:首先看题解是二分图匹配,但是建图目前还没想到呢.每个机器人绝对都在重要位置上,假设每个重要位置上都有机器人,可以保护哪几个重要物品.看是否能够匹配得来 #include<cs…
题意:每头奶牛都只愿意在她们喜欢的那些牛栏中产奶,告诉每头奶牛愿意产奶的牛棚编号,求出最多能分配到的牛栏的数量. 分析:直接二分图匹配: #include<stdio.h> #include<memory.h> #define MAX 202 bool flag,visit[MAX]; //记录V2中的某个点是否被搜索过 int match[MAX]; //记录与V2中的点匹配的点的编号 int cow, stall; //二分图中左边.右边集合中顶点的数目 int head[MA…