Crysfly的博客

博客

Public NOIP Round #7 题解

2024-10-21 23:23:46 By Crysfly
  • 组题人:znstz, Crysfly

填写数字

来源:

排列计数

来源:

黑白棋子

来源:

不妨假设 $w\ge b$。

记 $mx_i$ 为删去 $i$ 之后剩下的连通块的大小最大值,那么假如 $w>mx_i$,则 $i$ 任意时刻必须是白色。

考虑当有点必须是白色时,答案就是把这些必须是白色的点删去后,剩下的大小超过 $b$ 的连通块个数。

否则,答案是 $1$ 或 $2$,而且为 $1$ 当且仅当存在某个点 $u$,删去 $u$ 之后存在两个连通块大小超过 $w$ 且存在另一个连通块大小超过 $b$。

我们记 $m=\min\{mx_i\}$,显然这个式子在重心处取到最小,所以我们以重心为根(有两个的时候就以那条边为根)。

当 $w\le m$ 时,没有点必须是白色,割掉一个点后最大的连通块一定是父亲的那个,所以记 $se_i$ 为儿子子树中的次大值,那么当 $b\le \max\{se_i\}$,答案是 $1$,否则答案是 $2$。

当 $w>m$ 时,必须是白色点的那些点形成了一个包含根的连通块,那么我们知道删去白色的点之后剩下的连通块一定是某个子树,那么一个子树是剩下来的连通块的条件就是 $mx_{fa_i}< w\le mx_i$,然后会所有 $b\le \min(w,sz_i)$ 有 $1$ 的贡献。

复杂度 $O(n)$。

冒泡排序

来源:

考虑枚举一个值 $V$,将序列中 $\ge V$ 的值看作 $1$,$< V$ 的值看作 $0$,将序列变成 $01$ 的形式。

对于所有的 $V$,求出对 $01$ 序列做完后区间内 $1$ 的个数,把这些答案相加就是总和。

发现对于一段后缀,它的每个 $0$ 每轮会向前移一格。一段前缀,如果有 $1$ 的话,一定会有 $1$ 交换到交界处。

那么对于一个值 $V$,我们询问的后缀 $[p,r]$ 新增的 $1$ 的个数其实是 $[p,p+k-1]$ 中的 $0$ 数与 $[l,p-1]$ 中的 $1$ 数取 $\text{min}$。

把暴力写出来,发现 $\text{min}$ 两边的贡献都是简单的主席树查询,取 $\text{min}$ 的情况也是简单的主席树二分,直接维护就好了。

时间复杂度 $O(n \log n)$。

评论

fairytaleqwq
B 我写了一份简要题解 https://www.cnblogs.com/LazyBreeze/p/18492938 欢迎批评指正
  • 2024-10-22 15:27:40
  • Reply
xcyyyyy
题解中 T3 的 $se_i$ 的含义是否应该是 “儿子子树中的次大值”?
  • 2024-10-23 19:24:01
  • Reply
Milmon
Crysfly T4 std 疑似有误,输入为 ``` 8 5 1 0 2 1 1 1 1 1 1 1 1 ``` 时,答案显然应为 1,std 输出 0。 申请撤销 hack #1171 以及原题输入的序列的数据范围是1开始的,本题数据范围是0开始,建议修正数据范围为1开始或者添加数列中有 0 的数据。
  • 2024-11-13 14:05:16
  • Reply
Reven0712
请问 T3 的两个连通块大小超过 w,一个连通块大小超过 b 是否是 $\ge$?
  • 2024-11-01 22:22:49
  • Reply
lycc
Crysfly 感觉 D 题解写的很难蚌啊,实际上只要查询一个区间前 k 小和就行了,结论的证明也是简单的,似乎不需要任意值转 01 之后算取 min 的柿子/kx
  • 2024-11-26 15:54:02
  • Reply
kbzcz
怎么没B题解
  • 2024-10-22 09:15:06
  • Reply
kapok_123
B题呢
  • 2024-10-22 13:58:15
  • Reply

发表评论

可以用@mike来提到mike这个用户,mike会被高亮显示。如果你真的想打“@”这个字符,请用“@@”。