二分图
前言
二分图最大匹配算法可以使用匈牙利算法(复杂度 \(O(nm)\))或者基于网络流的 \(O(m\sqrt{n})\) 做法,我们这里默认使用后者。
二分图最大权匹配可以使用 KM 或者费用流,复杂度一致。
棋盘覆盖
把每个方格视作一个节点,只要两个方格都允许放置且相邻就连边,跑二分图最大匹配即可。时间复杂度 \(O(n^3)\)。
車的放置
将行和列连边跑二分图最大匹配即可。复杂度 \(O(n^2)\)。
导弹防御塔
首先我们知道,假设在 \(mid\) 时间内可以得到匹配,那么更大的时间也可以,那么问题具有单调性可以二分答案。假设二分答案为 \(mid\),思考如何求解。
首先我们可以很简单的计算出每一个导弹塔可以发射的导弹个数,记为 \(P\)。然后显然我们发现每一个导弹只会打一个目标,每一个防御塔我们只需要一个导弹。将导弹与目标连边,这样的图边数是 \(O(NMP)\) 的。当然我们还有时间的问题。我们可以计算出每一条边的时间,根据与 \(mid\) 的比较计算是否可行。
考虑复杂度。一次的计算是 \(O(NMP\sqrt{NP})\),注意我们不会需要超过 \(m\) 枚导弹,所以复杂度为 \(O(nm^2\sqrt{nm}\log V)\)。
导弹防御塔-EX
我们假定每一时刻所有塔只能发射一枚。(此处改动题面)
首先我们发现每个发射的冷却时间都是固定的,那么我们首先先计入 \(T1M\),然后计入所有冷却时间,就是 \((T2-1)M\),然后除以 \(V\) 我们求得就是最小的 \(\sum distance\)。我们注意到这个直接建图并不是二分图最大权最大匹配,因为我们发现一个导弹防御塔可以攻击多个目标。一种朴素的想法是复制 \(M\) 遍,但是这样复杂度是 \(O(N^3M^3)\),无法通过。
考虑到很多都是重复的,考虑优化。注意到我们可以考虑将一次选择好的东西删掉,问题是我们第一次选的可能因为“只能选一个的”约束漏掉最优解。最终我们选择将每个边排序,然后只要一个导弹不会连两条边我们就始终加入,然后反复跑匹配删点即可。最差时间复杂度 \(O(n^4)\)。
Ants
相交这个信息是困难的,不好判断,除非暴力枚举每一条边,但这样显然是比较劣的。
考虑一个相交方案,考虑转化这个信息。发现调换匹配点得到不相交路径,而这个路径距离会更小(三角形两边之和大于第三边)因此,一组完美匹配的最小长度一定是不相交的。那么跑 KM 即可,时间复杂度 \(O(n^3)\)。
注:本题还有复杂度为 \(O(n^2 \log n)\) 的分治计算几何做法。
注2:(不知道对不对)考虑每一条边,必然存在一种边不相交,则这个一定是最优方案中的某条边,选择并删去这些点,复杂度 \(O(n^4)\)。
Muddy Fields
首先注意到显然对于某一行的连通段我们显然会使用一个连续的覆盖而不是切成若干段。
然后考虑每一个泥地位置,发现他必须要被列或行覆盖。对于这类问题,我们提出二分图最小点覆盖模型:
- 将一个位置视为一条边。每条边连接列/行对应的点。
发现这个东西等价于我们要选若干个点,使得每条边都至少有一个点。
定理
二分图最小点覆盖数等于最大匹配数。
复杂度 \(O(RC\sqrt{RC})\)。
Air rAid
该问题即是经典的有向无环图不相交路径覆盖问题。
对于有向无环图上的每一个点,我们都可以考虑选择一个后继边。而这个对应着一个左部点可以选择一个右部点。因此对于边 \((x,y)\),在拆点二分图上连接 \((x,y+n)\)。跑二分图最大匹配,所有非匹配点即为一条路径。
going Home
对于任意一个人与房子之间连边,跑二分图最大权完美匹配即可。
Vani和Cl2捉迷藏
首先我们先介绍一个经典问题:有向无环图相交路径覆盖问题。
事实上我们将原图求传递闭包然后再做 Air raid 就是。思考这题与有向无环图相交路径覆盖问题有什么关系。首先任意一组答案都不能超过最小覆盖,那么我们只需构造出一组等于的即可。
我们可以选取在传递闭包图的路径结尾,然后进行如下操作:
- 取所有开头。
- 若存在两个点使得某个点可达另外一个点则反复移动这个“某个点”直到不会覆盖为止。
我们只需证明不会无法存在移动方案即可。事实上你画个图可以理解如果存在这样一条路径,使得放哪里都会被覆盖,那么一定违背最小性。
Team them up!
首先注意到如果两个点 \(x,y\) 之间不存在边或者只有 $x\rarr y $ 那么这两个点一定分属两个集合,那么在这两个点之间连一条边。此时连成了若干个图,问题有界当且仅当每个图都是二分图。
如果是二分图那么就有左部和右部,此时不连通的两个二分图之间的点想咋分都可以,那么就可以进行动态规划。定义 \(dp_{i,j}\) 表示第 \(i\) 个二分图其中一组为 \(j\) 是否可行,简单转移即可。最后枚举一下就做完了。复杂度 \(O(n^2)\)。
Place the robots
首先有一经典转化即为本题的问题等价于 Muddy Fields 这个问题。
我们发现一个方案是最优的当且仅当目前这个图是 Muddy Fields 的最小点覆盖。首先当一个覆盖不是点覆盖时就说明有位置还可以继续选那么一定不是最优,所以任意最优解一定是点覆盖。其次最小点覆盖从匹配得来,而匹配注定了每一条边总有方案只被选中一个点,那么这个做法就是正确的。
Steady Cow Assignment
首先看到极差先枚举一个极值点,这边我们枚举左端点。然后二分右端点,此时连边跑匹配 check 即可。时间复杂度 \(O(n\sqrt{n}B\log B)\)。

浙公网安备 33010602011771号