AGC014

A

若存在答案则答案是 \(\mathcal{O}(\log a)\) 的,直接模拟即可。

B

可以发现有解当且仅当给出的 \(m\) 条边存在欧拉回路。

C \((\texttt{Easy} \ 1 / 0)\)

删掉的障碍是随意选的,所以等价于求出前 \(k\) 步能走到的离边界最近的距离。

D \((\texttt{Easy} \ 3 / 0)\)

考虑一个儿子全部为叶子的非叶结点。如果其有 \(> 1\) 个儿子,那答案就肯定是 First;否则可以把这个点和它的唯一的儿子去掉,答案是一样的。于是一直删点并判断,最后根节点特判一下即可。

事实上这个过程和求树的匹配很像。可以证明答案为 Second 等价于树存在完美匹配。

时间复杂度 \(\mathcal{O}(n)\)

E \((\texttt{Easy} \ 3 / 1)\)

去掉一条蓝边意味着分裂了一个蓝树的连通块,而分裂之后的两个连通块在红树中必须要是连通块。

把这个过程倒过来,使用启发式合并维护即可。

F \((\texttt{Hard} \ 7 / 0)\)

这种题是怎么想到的啊!!!

基本上就是复读粉兔的题解

注意到 \(1\) 并不会影响其他元素是 high 或 low,我们不妨考虑去掉 \(1\) 以后的序列进行的操作。

假设 \(2 \sim n\) 用了 \(t\) 次排好序了,那么 \(1 \sim n\) 的答案就是 \(t\)\(t + 1\)。怎么判断呢?若 \(t = 0\) 的话就看 \(1\) 是不是在序列的最前面;否则我们设 \(t - 1\) 次操作以后序列最前面的值为 \(v\),不难发现 \(v > 2\),所以 \(v\) 是 high 的而 \(1\)\(2\) 是 low 的,那么答案为 \(t\) 等价于 \(1\)\(t - 1\) 次操作之后位于 \(v\)\(2\) 之间。

这个看起来变得更难判断了。但是我们给出如下结论:

  • 在操作的过程中,\(1, 2, v\) 的循环顺序不改变。

证明的话,首先证明 \(v\) 作为 high 元素当且仅当它的位置在最前面,然后分类讨论即可证明。

发现对于 \(\forall i\),考虑 \(i\)\((i, n]\) 的序列,上面的结论都是成立的。这样我们就可以从 \(n\)\(1\) 递推 \(t\)\(v\) 了。具体地:

  • \(t_{i + 1} = 0\)
    • \(i\)\(i + 1\) 前面,则 \(t_i = 0\)\(v_i\) 未定义。
    • 否则,\(t_i = 1, v_i = i + 1\)
  • 否则:
    • \(i, i + 1, v_{i + 1}\) 的循环顺序是 \(1, 2, v_{i + 1}\),则 \(t_i = t_{i + 1}, v_i = v_{i + 1}\)
    • 否则,\(t_i = t_{i + 1} + 1, v_i = i + 1\)

最后的答案就是 \(t_1\)。时间复杂度 \(\mathcal{O}(n)\)

posted @ 2022-10-04 10:18  Scintilla06  阅读(28)  评论(0编辑  收藏  举报