【题解】UOJ Round #11
// created on 22.09.30
A. 元旦老人与汉诺塔
我猜了一手状态数不多,结果是真的。
怎么分析呢,考虑到 \(2^7\geq m\),说明一根柱子上最多只有 \(7\) 个圆盘发生移动。这样粗略的上界就是 \(3^{21}\) 。而不可能圆盘都会移动,可以使用的次数并不多,因此状态数再次缩水。
B. 元旦老人与丛林
看 Subtask 有什么启发式作用!
我们注意到 \(m>2n-2\) 时一定是无解的。即,如果存在一个子图满足 \(m>2n-2\) 也肯定无解。那我们不妨猜测如果均满足 \(m\leq 2n-2\),就肯定有解。
考虑归纳证明。选取度数最小的点 \(u\),其度数只能是 \(0,1,2,3\) 。度数为 \(0,1,2\) 的情况都很简单。我们来讨论度数为 \(3\) 的情况,当前点非法当且仅当三个出边对应到两张图相同的连通块上了。
我们考虑称一个满足 \(m=2n-2\) 的图是 "满" 的。那么记录出边三点为 \(a,b,c\),如果我们能找到其中两点 \(x,y\) 使得 \(G_1\) 中包含 \(x,y\) 的子图没有一个是满的,那么将 \(x,y\) 加入进去,调整出新方案就行了。另一边向 \(G_2\) 加入剩下的一个点。
此时,如果找不到这样的 \(x,y\) 。我们考虑两个有交的满的子图 \(G_x,G_y\),其交的部分为 \(G_z\),那么 \(G_z\) 也是满的,因此 \(G_x,G_y\) 的并也应该是满的。因此肯定有一个子图 \(G_s\) 包含 \(a,b,c\) 且是满的(合并几个子图即可),此时往 \(G_s\) 中加入 \(u\) 得到的图非法。
于是得证。我们只需要试图找到一个满足 \(m-2n\) 最大的子图。这样将边看成代价为 \(1\),点看成代价为 \(2\),然后找一个最大全闭合非空子图。如果其权值大于 \(-2\) 就出事了。此时,如果直接按照最大全闭合子图的建模方式跑,因为允许空图,所以跑出来可以是 \(0\) 。
因此我们枚举一个点,限制其必须选。要做的就是删边退流。退流直接跑两遍最大流就行了。
C. 元旦老人与数列
给定长度为 \(n\) 的序列,要求支持区间加,区间取 \(\max\),查询区间最小值,以及区间历史最小值。
数据范围:\(1\leq n,m\leq 5\times 10^5\) 。
空间限制 96 MiB。
历史最小值可以写成子段和的形式合并。
加入区间取 \(\max\) 的话,就是 Segment Beats 。单独维护一套区间最小值的标记即可。