Loading

【题解】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 。单独维护一套区间最小值的标记即可。

posted @ 2022-09-30 15:41  Qiuly  阅读(344)  评论(0编辑  收藏  举报